众所周知,要实现网络通信,要使得多台设备能够协同工作实现信息交互和资源共享就必须要遵守相互都能接受的规则,而这种规则便是我们所熟悉的通信协议。因此说到底网络通信的根本其实还是通信协议,而平时我们最常用的通信协议就是TCP/IP、NETBEUI和IPX/SPX三种协议。
我仔细翻看了一些资料后,算是对TCP/IP协议有了一些了解,TCP/IP协议就是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通信协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。而TCP/IP一般有下面几个层次
网络接口层:也称为数据链路层,它是 TCP/IP 的最底层。
互联网层:也称IP层,该层把分组封装到IP数据报中,填入数据报的首部,使用路由算法来选择数据报的传输途径。然后把数据报交给下面的网络接口层中的对应网络接口模块。
传输层:其功能是使源端主机和目标端主机上的对等实体可以进行会话。分为TCP和UDP协议。
应用层:将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。
当我们分别使用TCP与UDP来发送数据时,我们会发现,TCP会判断文件是否发送成功,如未发送成功,则重新发送数据包,虽然能够精确的传输你想要的数据包,却因此导致TCP数据包发送的效率低下而UDP则是更注重于效率方面,不管数据包是否被接收,UDP只负责发送数据,因此UDP的效率相比TCP无疑是高了很多。而我们所熟悉的QQ也是用UDP来传输服务器与客户机之间的数据。
下面是使用UDP的一个简单的java客户端的创建:
package pzw.xieyi;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import javax.swing.JTextArea;
public class NetClient extends Thread{
private String msg;
private JTextArea jta = new JTextArea();
public NetClient(String msg,JTextArea jta){
this.msg = msg;
this.jta = jta;
}
public void run(){
try{
//创建用来接收的本地地址对象
SocketAddress localaddr = new InetSocketAddress("192.168.43.172",420);
//接收的服务器UDP端口
DatagramSocket recvSocket = new DatagramSocket(localaddr);
while(true){
//指定接收缓冲区大小
byte[] buffer = new byte[20];
//创建接收数据包对象,指定接收大小
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
recvSocket.receive(packet);
//得到发送方的ip和端口
SocketAddress address = packet.getSocketAddress();
//转换接收到的数据为字符串
msg=new String(packet.getData()).trim();
jta.append(msg);
System.out.println("收到数据:"+msg);
}
}catch(Exception ep){
ep.printStackTrace();
}
}
}
这便是我这段时间对TCP/IP协议的学习心得~~~