当前位置 : 主页 > 网络编程 > 其它编程 >

TCP/IP协议和Socket编程

来源:互联网 收集:自由互联 发布时间:2023-07-02
先来介绍下网络协议TCPIPTransmissionControlProtocol传输控制协议InternetProtocol互联网协议UDPUserDatagra 先来介绍下网络协议    TCP/IP        Transmission Control Protocol 传输控制协议        Interne
先来介绍下网络协议TCPIPTransmissionControlProtocol传输控制协议InternetProtocol互联网协议UDPUserDatagra

先来介绍下网络协议    TCP/IP        Transmission Control Protocol 传输控制协议        Internet Protocol 互联网协议    UDP        User Datagram Protocol 用户数据协议 连接协议    分为    面向连接协议: Connection Oriented Protocol    非连接协议: Connectionless Protocol    1).面向连接协议是指两台电脑在传输数据前先会建立一个专属的连接。就如电信局的交换机会为打电话双方提供专属连接一样。    Internet上的面向连接协议就是TCP/IP    特点确认回应分组序号流量控制。    TCP/IP属于可靠性传输适合不容许有传输错误的网络程序设计使用    2).非连接协议无专属连接无分组容错距离短可同时对多台电脑进行数据传输    Internet上的非连接协议就是UDP    TCP在网络通信上有极强的生命力例如远程连接Telnet和文件传输FTP都需要不定长度的数据被可靠地传输。相比之下UDP操作简单而且仅需要较少的监护因此通常用于局域网高可靠性的分散系统中client/server应用程序。 Socket 是程序与网络间的一种接口大部分网络应用程序都是点对点的所谓点就是服务器端和客户端所执行的程序。Socket是用来接收和传送分组的一个端点。 java的Socket编程要用到java.net包最常用的是net包下的6个类InetAddress(互联网协议 (IP) 地址)类Socket(套接字)类ServerSocket(套接字服务器)类DatagramSocket(发送和接收数据报包的套接字) 类DatagramPacket(数据报包)类MulticastSocket(多播数据报套接字类用于发送和接收 IP 多播包)类其中InetAddress、Socket、ServerSocket类是属于TCP面向连接协议DatagramSocket、 DatagramPacket和MulticastSocket类则属于UDP非连接协议的传送类。

——From: http://cuishen.iteye.com/blog/242842

TCP 通信模型

0_1302877494JK8b.gif

Socket模型

0_1302877516PzMP.gif

示例代码

UdpServer.java

package me.bym.udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;public class UdpServer {public static void main(String[] args) {// 声明UPD socket,即DatagramSocketDatagramSocket socket null;try {// 产生DatagramSocket对象制定监听端口socket new DatagramSocket(1234);// 设置消息读取缓冲区byte data[] new byte[512];// 声明和定义UDP数据包内容是消息缓冲区的内容DatagramPacket packet new DatagramPacket(data, data.length);// 调用阻塞方法receiver接受客户端发来的内容存放到消息缓冲区packet中socket.receive(packet);// 打印消息String msg new String(packet.getData(), packet.getOffset(),packet.getLength());System.out.println(msg);} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 关闭socketsocket.close();}}}

UdpClient.java

package me.bym.udp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class UdpClient {public static void main(String[] args) {DatagramSocket socket null;String msg null;try {socket new DatagramSocket();// 从标准输入键盘读取数据BufferedReader reader new BufferedReader(new InputStreamReader(System.in));while (!(msg reader.readLine()).equalsIgnoreCase("exit")) {// 产生一个InetAddress内容是服务器端的IPInetAddress serverAddress InetAddress.getByName("127.0.0.1");// 构造要发送消息的数据报 并制定服务器监听的端口DatagramPacket packet new DatagramPacket(msg.getBytes(),msg.getBytes().length, serverAddress, 1234);// 发送数据报socket.send(packet);}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {socket.close();}}}

TcpServer.java

package me.bym.tcp;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpServer {public static void main(String[] args) {// 声明一个服务器端socketServerSocket serverSocket null;// 声明一个socket来接受客户端连接Socket socket null;try {int temp;// 定义服务器端socket并指定监听端口serverSocket new ServerSocket(5937);// 调用阻塞式方法来获取客户端连接的socketsocket serverSocket.accept();// 获取客户端socket的输入流InputStream inputStream socket.getInputStream();// 读取客户端socket的输入流的内容并输出byte[] buffer new byte[512];while ((temp inputStream.read(buffer)) ! -1) {System.out.println(new String(buffer, 0, temp));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {socket.close();serverSocket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

TcpClient.java

package me.bym.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class TcpClient {public static void main(String[] args) {// 声明一个socketSocket socket null;try {String msg null;// 产生socket对象制定服务器地址和服务器监听的端口号socket new Socket("127.0.0.1", 5937);// 从标准输入键盘读取内容获取socket的输出流将读取到的内容放入输出流中BufferedReader reader new BufferedReader(new InputStreamReader(System.in));OutputStream outputStream socket.getOutputStream();while (!(msg reader.readLine()).equalsIgnoreCase("exit")) {outputStream.write(msg.getBytes());}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

——From: http://blog.csdn.net/baoyiming1991/article/details/6326768

转:https://blog.51cto.com/xiajun/1198012

上一篇:这个回答让我错失offer!快来收藏!
下一篇:没有了
网友评论