1. TCP协议:控制传输协议
特点:面向有链接,所有问题都要建立连接,数据安全,完整,三次握手后建立连接后才可以数据传输
TCP协议传输的客户端
package ClientAndServer_TCP;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception{
/*
服务器端ip地址
自动建立连接
三次握手
input和output流
*/
while (true) {
Socket client = new Socket("127.0.0.1",12345);
System.out.println("输入要发送的内容:");
Scanner sc = new Scanner(System.in);
// 输出流,客户端对于服务器是输出流
String msg = sc.nextLine();
OutputStream outputStream = client.getOutputStream();
outputStream.write(msg.getBytes());
System.out.println("发送ok!!!");
//读取服务器返回来的反馈
InputStream inputStream = client.getInputStream();
byte[] bs = new byte[1024];
int len = inputStream.read(bs);
System.out.println("服务器响应:"+ new String(bs,0,len));
System.out.println("==============================");
}
}
}
TCP协议传输的服务器端
package ClientAndServer_TCP;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP服务器
* author lp
*/
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(12345);
//获取哪一个客户端连接的我 也具有等待功能
while (true) {
System.out.println("等待接受数据...");
Socket client = serverSocket.accept();
String ip = client.getInetAddress().getHostAddress();
//获取输入流,相对于客户端为输出流
InputStream inputStream = client.getInputStream();
byte[] bs = new byte[1024];
int len = inputStream.read(bs);
System.out.println("客户端地址" + ip);
System.out.println("客户端说:" + new String(bs, 0, len));
//向客户端回写收到了数据
OutputStream outputStream = client.getOutputStream();
outputStream.write("消息已收到".getBytes());
System.out.println("****************************************");
//serverSocket.close();
//client.close();
}
}
}
结果:
客户端
服务器端:

客户端回车发送后:

服务器收到消息:

2. UDP协议:用户数据报协议
特点 : 面向无连接,数据不安全,不管对方开不开机,存不存在
数据的发送和接受器
- DategramSocket
数据包类(存数据)
- DategramPacket
发送端:
package manyMessageSocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class UDPSender {
public static void main(String[] args) throws Exception{
//接受和发送器(发送器)
DatagramSocket ds = new DatagramSocket();
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("输入要发送的内容");
String sendMsg = sc.nextLine();
//byte[] bs = sendMsg.getBytes();
//封装 数据包 类
DatagramPacket dp = new DatagramPacket(sendMsg.getBytes(), sendMsg.length(), InetAddress.getByName("127.0.0.1"), 12345);
ds.send(dp);
System.out.println("数据发送ok");
}
}
}
接收端:
package manyMessageSocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPRevicer {
public static void main(String[] args) throws Exception{
//接收端必须有一个接收的端口号(接收器)
DatagramSocket ds = new DatagramSocket(12345);
while (true) {
byte[] bs = new byte[1024];
DatagramPacket dp = new DatagramPacket(bs, bs.length);
System.out.println("等待接受数据....");
ds.receive(dp);
System.out.println("接受ok");
//获取发送端的地址
InetAddress sendAdd = dp.getAddress();
System.out.println("发送端地址" + sendAdd.getHostAddress());
//获取发送端的数据
byte[] data = dp.getData();
//获取发送端数据的长度
int len = dp.getLength();
String reciveMsg = new String(data,0,len);
System.out.println("接收到的内容:" + reciveMsg);
System.out.println("==================================================================================");
}
}
}
结果:(哪位大佬解释一下udp传输消息时候为什么会有乱码)
发送端

接收端:

1391



被折叠的 条评论
为什么被折叠?



