TCP
理论知识待添加
public class Server {
public static void main(String[] args) {
try {
// 1、创建一个ServerSocket对象
ServerSocket serverSocket = new ServerSocket(8081);
// 2、调用accpet()方法接收客户端请求(建立连接)
System.out.println("等待连接。。。");
Socket s = serverSocket.accept();
// 3、获取socket对象的输入输出流
InputStream in = s.getInputStream();
// 4、获取客户端传过来的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
System.out.println(reader.readLine());
// 5、关闭流
reader.close();
// 6、关闭连接
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Client {
public static void main(String[] args) {
try {
// 1、创建一个Socket对象(相当于建立了连接)
Socket socket = new Socket("172.17.204.59",8081);
// 2、获取输出流
OutputStream out = socket.getOutputStream();
// 3、输出内容
out.write("fdsf".getBytes());
// 4、关闭流
out.close();
// 5、断开连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class ClientDemo1 {
ServerSocket serverSocket;
public static void main(String[] args) {
ClientDemo1 c = new ClientDemo1();
Scanner scanner = new Scanner(System.in);
System.out.println("这是8082.。");
Thread t1 = new Thread(() ->{
while(true){
//发送端口
String str = scanner.next();
c.send("127.0.0.1",8081,str);
}
} );
Thread t2 = new Thread(() ->{
//这是自己的端口
c.receive(8082);
});
t1.start();
t2.start();
}
//发送消息
public void send(String ip,int port,String sendStr){
try {
Socket socket = new Socket(ip,port);
OutputStream out = socket.getOutputStream();
out.write(sendStr.getBytes());
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//接收消息
public void receive(int port){
try {
serverSocket = new ServerSocket(port);
//该方法会进入线程等待状态
while (true) {
Socket s = serverSocket.accept();
InputStream in = s.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
System.out.println(reader.readLine());
reader.close();
s.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP
理论知识待添加
public class Server {
public static void main(String[] args) {
try {
//1、创建DatagramSocket对象,并且声明端口
DatagramSocket server = new DatagramSocket(8082);
System.out.println("服务端已启动");
//2、创建接受包DatagramPacket 因为字节接收,那么包的大小由你创建字节数组来决定。
byte[] b = new byte[20];
DatagramPacket dao = new DatagramPacket(b,b.length);
//3、通过socket调用receive等待包内容
server.receive(dao);
//4、接收到包后解释包内容
byte[] jie = dao.getData();
System.out.println(jie.length); //
System.out.println(new String(jie,0,jie.length));
//5、关闭 DatagramPacket
server.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Client {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(System.in);
//1、创建DatagramSocket 对象,并且声明端口(客户端口可以省略,对于客户端不关注端口)
DatagramSocket client = new DatagramSocket();
byte[] b = scanner.next().getBytes();
//2、把发送的内容封装到DatagramPacket并且把服务端的ip以及端口带上
//发送的时候数据包调用最后一个构造方法。
//InetAddress.getByName 区创建一个地址
DatagramPacket d = new DatagramPacket(b,0,b.length, InetAddress.getByName("127.0.0.1"),8082);
//3、通过send方法发送DatagramPacket数据包
client.send(d);
//4、关闭DatagramSocket
client.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}