欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tcip udp协议的分析

程序员文章站 2022-06-05 18:54:07
...
TCP/IP是Transmission Control Protocol/Internet Protocol的简写由网络层的IP协议和传输层的TCP协议组成。为了使连入Internet的众多主机在通信时能够相互识别,Internet上的每一台主机和路由器都分配有一个唯一的32位地址。一个IP地址有4个字节组成,字节之间用句号分隔,每个字节表示为从 0 ~ 255 的十进制数。TCP/IP一般有下面几个层次
网络接口层:也称为数据链路层,它是 TCP/IP 的最底层。
互联网层:也称IP层,该层把分组封装到IP数据报中,填入数据报的首部,使用路由算法来选择数据报的传输途径。然后把数据报交给下面的网络接口层中的对应网络接口模块。
传输层:其功能是使源端主机和目标端主机上的对等实体可以进行会话。分为TCP和UDP协议。
应用层:将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。


一个简单地TCP/IP服务端代码:
ServerSocket server = new ServerSocket(port);
然后再获取输入输出流一个极其简单地基于TCP/IP的服务器端就这么产生啦,
OutputStream out = client.getOutputStream();
InputStream ins = client.getInputStream();

而一个客服端代码也可以简简单单的,当然你也可以直接用命令telnet 直接进行连接
TCP/IP所建立的连接时双向的,也就是说双方必须都保持连接,通信才能正常的进行,
在数据包进行传输的时候发现错误的包可以直接返回给服务器端,要求重新发送;

而基于UDP协议的通信就没这么麻烦,他是指负责对某一个端口进行传送数据,不会管你收不收的到,在不在线,他的任务就是负责发送数据

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class DatagramSender {
public static void main(String args[]) throws Exception {
//1.创建要用来发送的本地地址对象
SocketAddress localAddr = new InetSocketAddress("192.168.1.147",
13000);
//2.创建发送的Socket对象
DatagramSocket dSender = new DatagramSocket(localAddr);
int count=0;
while(true){
// 创建要发送的数据,字节数组
count++;
//3.要发送的数据
byte buffer[] = (count+"-hello").getBytes();
//4.发送数据的目标地址和端口
SocketAddress destAdd = new InetSocketAddress("192.168.1.149", 14000);
//5.创建要发送的数据包,指定内容,指定目标地址
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, destAdd);
dSender.send(dp);//6.发送
System.out.println("数据已发送: "+count);
Thread.sleep(1000);
}
}
}


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class DatagramReciver {
public static void main(String args[]) throws Exception {
//1.创建要用来发送的本地地址对象
SocketAddress localAddr = new InetSocketAddress("192.168.1.149",
14000);
//2.接收的服务器UDP端口
DatagramSocket recvSocket = new DatagramSocket(localAddr);
while(true){
//3.指定接收缓冲区大小
byte[] buffer = new byte[20];
//4.创建接收数据包对象,指定接收大小
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
//5.阻塞等待数据到来,如果收到数据,存入packet中的缓冲区中
System.out.println("UDP服务器等待接收数
据:"+recvSocket.getLocalSocketAddress());
recvSocket.receive(packet);
//得到发送方的IP和端口
SocketAddress address = packet.getSocketAddress();
//转换接收到的数据为字符串
String msg=new String(packet.getData()).trim();
//接收到后,打印出收到的数据长度
System.out.println("recv is:"+msg+" from:"+address);
}
}
}



最后附上两个大神对qq通信协议的分析,反正我是被搞晕了 :x :x :x
相关标签: 网络应用