Kratos

A responsible theme for WordPress

Java实现UDP、TCP客户端和服务端通信的基本代码流程

UDP实现

UDP协议:

无连接协议,也称透明协议,也位于传输层。

三、两者区别:

1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制); UDP提供无连接的传输,通信前不需要建立连接。
2) TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。
3) TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组; UDP是面向数据报的传输,没有分组开销。
4) TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制和流量控制机制。

-client

package cn.edu360;

/*
* UDP客户端的简单实现和流程
*/
import .net.DatagramPacket;
import .net.DatagramSocket;
import .net.InetAddress;

public class Client {

public static void main(String[] args) throws Exception {

// 1.建立udp客户端的socket服务
DatagramSocket ds = new DatagramSocket();

// 2.将发送的数据封装成数据包,并指定发送ip地址和端口号
byte[] buf = “UDP,I’m coming”.getBytes();
int length = buf.length;
InetAddress address = InetAddress.getByName(“192.168.5.255”);

int port = 8888;
DatagramPacket dp = new DatagramPacket(buf, length, address, port);

// 3.发送数据包
ds.send(dp);

// 4.关闭socket服务并释放资源
ds.close();

}

}

UDP-server

package cn.edu360;
/*
* UDP服务器端的简单实现和流程
*/
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {

public static void main(String[] args) throws Exception {
//1.为server服务器端创建socket服务,并且指定监听的端口号
DatagramSocket ds = new DatagramSocket(11111);

//2.创建一个数据报包,用来存放接收到的数据
byte[] buf = new byte[1024];
int length = buf.length;
DatagramPacket dp = new DatagramPacket(buf, length);

//3.接收数据并储存到数据包中
ds.receive(dp);

//4.将数据包中的数据解析出ip地址、端口号和发送内容
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
length = dp.getLength();
byte[] data = dp.getData();
String content = new String(data, 0, length);
System.out.println(“ip=” + ip + ” port=” + port + ” content=” + content);

//关闭socket服务,并释放资源
ds.close();
}

}

TCP实现

TCP协议:

位于传输层, 提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。 而可靠的传输服务是指, 能够把数据准确可靠地传给对方。 即TCP 协议为了更容易传送大数据才把数据分割, 而且 协议能够确认数据最终是否送达到对方。所以,TCP连接相当于两根管道(一个用于服务器到客户端,一个用于客户端到服务器),管道里面数据传输是通过字节码传输,传输是有序的,每个字节都是一个一个来传输。

TCP-client

package cn.edu360;

/*
* TCP传输客户端的简单实现和流程
*/
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Client {

public static void main(String[] args) throws Exception {
// 1.创建客户端套接字,并指定发送的ip地址和端口号
Socket s = new Socket(InetAddress.getByName(“192.168.5.30”), 8888);

// 2.获取输出流,输出流是用来向服务器发送数据的
OutputStream out = s.getOutputStream();

// 3.向服务器输出数据
String content = “TCP,I’m coming”;
out.write(content.getBytes());

// 4.关闭客户端套接字
s.close();
}

}

TCP-server

package cn.edu360;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
* TCP服务器端的简单实现和流程
*/
public class Server {

public static void main(String[] args) throws Exception {
// 1.创建服务器端套接字,并指定监听端口
ServerSocket ss = new ServerSocket(8888);

// 2.侦听并接受到此套接字的连接
Socket s = ss.accept();

// 3.从连接里获取到数据流
InputStream in = s.getInputStream();

// 4.从输入流里读取数据
byte[] buf = new byte[1024];
int len = in.read(buf);
String content = new String(buf, 0, len);
String ip = s.getInetAddress().getHostAddress();
System.out.println(“ip=” + ip + ” content=” + content);

// 5.关闭socket
s.close();
ss.close();
}

}

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注