socket通信

说到socket通信,我相信大家多多少少会有些了解。我在这里说说tcp、udp通信

一、tcp通信

1、tcp协议使面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式创建连接,形成传输数据的通道,在连接中进行大量数据的传输,效率稍低

2、Java中基于tcp协议实现网络通信的客户端Socket类,服务端用ServerSocket

通信图

客户端通信步骤

1、创建Socket:里面填写服务端ip和通信端口号

Socket socket = new Socket("127.0.0.1",10088);

2、通过输出流向服务端发送消息

PrintWriter pw = new PrintWriter(socket.getOutputStream())

3、通过输入流读取服务端返回的消息

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str1;
while((str1 = br.readLine()) != null){
 System.out.println("服务端返回的确认信息:"+str1);
}  

4、关闭输入输出流、关闭socket

pw.flush();
pw.close();
socket.close();

服务端步骤

1、创建serverSocket和Scoket对象,绑定监听端口

Scoket socket;

ServerSocket ss = new ServerSocket(10088);

2、通过accept()方法监听客户端请求

socket = ss.accept();

3、连接建立后,通过输入流读取客户端发送的请求信息

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str;
while ((str = br.readLine()) != null) {
 System.out.println("str:"+str);
}

4、通过输出流箱客户端发送相应信息

if(!str.equals("")&&str!=null){
 //有消息时输出流开始写,并给客户端发送
PrintWriter pw = new PrintWriter( socket.getOutputStream());
pw.println("ok"+str);
}

5、关闭相关资源

pw.flush();

pw.close();

socket.close();

ss .close();

当需要双方多次通信时先不关闭socket和ss等收到双方断开的消息时关闭socket与ss

二、udp通信

udp通信协议是无连接的、不可靠的、无序的、速度快,由于udp不需要客户端回复,就会出现丢包的情况

进行数据传输时,首先将要传输的数据定义成数据报,在数据报中指明数据要达到的socket(主机地址和端口号),然后再将数据报文发送出去

DatagramPacket表示数据报类

DatagramSocket表示端到端通信的类

客户端实现步骤

1、定义发送到的服务器的地址、端口号、数据信息

InetAddress address =InetAddress.getByName("localhost");
int port =10010;
byte[] data ="我来发送信息了".getBytes();

2、创建DatagramPacket,包含将要发送的信息

DatagramPacket packet = newDatagramPacket(data,data,length,address,port);

3、创建DatagramSocket

DatagramSocket socket =newDatagramSocket();

4、发送数据

socket.send(packet);

若客户端要接收服务端的消息,则进行以下步骤

5、创建数据报,用于接收服务器端的响应数据

byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2,data2.length);

6、接收服务器响应的数据并输出

socket.receive(packet2);
String raply = new String(data2,0,packet2.getLenth());
System.out.println("我是客户端,服务器说:"+reply);

7、关闭资源

socket.close();

服务端步骤

1、创建服务器端DatagramSocket,并且指定端口号

DatagramSocket getSocket = new DatagramSocket(10088);

2、创建DatagramPacket用于接收客户端发送数据的数据报

byte[] buf = new byte[36];
DatagramPacket getPacket = new DatagramPacket(buf, buf.length);

3、接收客户端发送的数据并读取

socket.receive(packet);
String info =newString(data,o,data.length);
System.out.println("我是服务器,客户端告诉我"+info);

若需要收到客户端信息后给客户端进行回复,则进行以下步骤

4、定义客户端的地址、端口号、数据

InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "欢迎您!".geyBytes();

5、创建数据报,包含回复的数据信息

DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port);

6、回复客户端

socket.send(packet2);

7、关闭资源

socket.close();

小M微信二维码 : 有问题可以加微信

打赏二维码:觉得有用有帮助的可以给小M~打赏哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值