你好啊!我是山茶,一个持续探索 AI + 测试之路的程序员。
TCP 协议与 TCP/IP 协议之间的关系,TCP 与 UDP 包含在 TCP/IP 中,TCP/IP 是协议簇名称
TCP (传输控制协议) 和 UDP (用户数据报协议) 是 TCP/IP 协议簇中,两个互不相同的传输协议
TCP/IP 协议簇包括应用层,传输层,网络层,网络访问层等多层,OSI 网络模型及 TCP/IP 模型见“网络模型”
TCP协议
可靠传输协议,基于连接通过在发送和接收方之间建立可靠的通信通道来确保数据的准确传递
使用Java实现 TCP 通信
// 服务端等待客户端建立连接
package TcpServer;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*
* 1、建立服务的端口ServerSocket
* 2、等待用户的连接 accept
* 3、接收消息
* */
public class TcpServer {public static void main(String[] args) throws Exception {fileServer();}public static void fileServer() throws Exception{
// 1、创建服务ServerSocket serverSocket = new ServerSocket(9000);
// 2、监听客户端的连接Socket socket = serverSocket.accept();
// 3、获取输入流InputStream is = socket.getInputStream();
// 4、文件输出FileOutputStream fos = new FileOutputStream(new File("receive.txt"));byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){fos.write(buffer,0,len);}
// 5、通知客户端接收完成OutputStream os = socket.getOutputStream();os.write("我接收完毕了,你可以断开了".getBytes());
// 6、关闭资源fos.close();is.close();socket.close();serverSocket.close();}
}
// 客户端与服务端建立通信链接
package TcpClient;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;/*
* 1、通过Socket连接服务器
* 2、发送消息
* */
public class TcpClient {public static void main(String[] args) throws Exception{fileClient();}public static void fileClient() throws Exception{
// 1、创建一个socket连接Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
// 2、创建一个输出流OutputStream os = socket.getOutputStream();
// 3、读文件FileInputStream fis = new FileInputStream(new File("aaa.txt"));
// 4、写出文件byte[] buffer = new byte[1024];int len;while ((len=fis.read(buffer))!=-1){os.write(buffer,0,len);}
// 5、通知服务器,我已经传输完了socket.shutdownOutput();// 6、确定服务器接收完毕,才能断开连接InputStream inputStream = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer2 = new byte[1024];int len2;while ((len2=inputStream.read(buffer2))!=-1){baos.write(buffer2,0,len2);}System.out.println(baos.toString());// 7、关闭资源fis.close();os.close();socket.close();}
}
UDP协议
UDP 是一种无连接的协议,它不提供可靠性和有序传输
// 服务端等待客户端发送数据
package UdpServer;import java.net.DatagramPacket;
import java.net.DatagramSocket;//等待发送端的链接
public class UdpServer {public static void main(String[] args) throws Exception {learnUdpServer();}public static void learnUdpServer() throws Exception{
// 开放端口DatagramSocket socket = new DatagramSocket(9090);
// 接收数据包byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);System.out.println(packet.getAddress().getHostAddress());System.out.println(new String(packet.getData(),0,packet.getLength()));
// 关闭连接socket.close();}
}
// 客户端发送数据
package UdpClient;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*
* 不需要连接服务器
* UDP没有服务器客户端的概念,任何机器都可以互相发送消息,被称为“发送端”和“接收端”。
* */
public class UdpClient {public static void main(String[] args) throws Exception {learnUdpClient();}public static void learnUdpClient () throws Exception{
// 1、建立一个Socket,DatagramSocket数据报。DatagramSocket socket = new DatagramSocket();
// 2、建个包String msg = "你好啊 ,了解更过内容,请公众号搜索:程序员山茶";InetAddress localhost = InetAddress.getByName("localhost");int port = 9090;DatagramPacket pack = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
// 3、发送包socket.send(pack);
// 4、关闭连接socket.close();}
}
TCP与UDP传输协议见的
作者简介:
程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。公众号【程序员山茶】
欢迎关注我, 和我一起探索测试之路,终身成长