初涉通信编程

初涉通信编程
  从两个罐头加一根线开始,人类就在探索如何利用工具进行远程通信,从飞鸽传书、鸿雁传信、烽火传音,百余年已经过去,人类的通信史依旧在不断的进化。而随着1831年,法拉第发现电磁感应这一现象之后,人类使用电进行信息传递的时代也逐渐开启。通讯技术关键性的变革发生在19世纪中期。1844年5月24日,美国艺术家兼发明家莫尔斯成功发出了世界上第一份长途电报。从此,千百年来人类千里传音的梦想终于得以实现。发展到今天,我们已经处于一个信息弥漫的时代,从互联网,移动互联网,物联网、?手机通信由1G、2G、2.5G、3G、4G?。。。
未来总是充满太多想象,而我们更能把握的只是现在,在蓝杰,我接触到了JAVA网络通信编程方面的知识,也算是我已经站在了通信世界的门口了。
TCP通信
TCP协议介绍
TCP是面向连接的通信协议,通过三次握手建立连接,只能用于点对点的通信。TCP提供的是一种可靠的数据流服务,采用差错重传技术来实现。TCP还可以进行流量控制,从而限制了发送方的速度。封装好的TCP数据服务包将向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号确认,所以未按照顺序收到的包可以排序,而损坏的包可以重新传输。TCP将它的通信信息传送到更高层的应用程序,例如Telent的服务程序和客户端。应用程序轮流信息送回TCP层,TCP层便将他们向下传送,设备驱动程序和物理介质,最后到接收方。是一个不断打包,包上加包,再不断拆包,一层接着一层的拆解的过程。在这里我理解为:具体到抽象,在由抽象到具体的实现过程。在这过程中由很多抽象层组成。
TCP三次握手:三次握手是指通过TCP客户机与服务器建立练习时,为了达到安全传输数据和确保连接而进行的三次同步作用的包。首先,发送一个同步消息,对方收到后加上一个确认消息回同步消息,己方收到后也又一次发送确认消息和同步消息的包。
2.TCP通信编程通信建立简要流程
A.创建服务器对象
ServerSokcet ss = new ServerSocket(9090);//设定本机上的一个端口给服务器程序使用。

B. 创建客户端(套接字,服务器与客户端连接成功后,就不存在服务端与客户端之分了)
Sockect client = new Socket(192.168.1.168,9090);//设置目标机器和IP和通信程序的通
信端口。
C.获取连接对象
while( true){
Socket client =ss.accept();//这里让服务器在while中等待:阻塞状态。
}

//获取目标连接对象的多个连接对象时(为了连续长久的通信)我们这里可以创建一个线程进行处理,进行信息的读取、发送操作。
//根据获取的不同的消息连接对象,就会创建不同的线程进行处理。
Thread td =New processThread(client);//这里我们把线
Td.start();

程分装在一个处理线程类里面了,
}
D.获取输入输出流,进行读写操作。
如果我们在线程中,处理消息。首先我们通过构造方法已经把client连接对象已经传入。我们就可以:
获取输出流,进行写出操作(接收消息)。
OutputStream os = client.getOutputStream();
os.write("消息内容");

获取输入流,进行读入操作(发送消息)。
IntputStream is = client.getIntputStream();
Is.read("消息内容")

UDP通信
UDP简介
UDP协议的全称是用户数据包协议,在网络中它与TCP协议一样用于处理

UDP
数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。   与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。   UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
UDP通信编程通信建立简要流程
创建服务器(发送端)
打包本地地址(!因为UDP是采用数据包传输,首先我们包装本地机器地址及程序使用的端口。对于目标地址也一样)
创建Socket对象
java.net.DatagramSocket server=new java.net.DatagramSocket("192.168.1.168",13000);//包装本地IT地址和程序端口

C.打包目标地址
SocketAddress destAdd = new InetSocketAddress("192.168.1.188",140000);//包装目标机器Ip地址和程序端口

d.打包数据
Byte buffer[] = new ("消息内容").getBytes();//我们将数据打包成字节数组

f.创建数据包载体(用来发送消息)
//创建要发送的数据包,指定内容,指定目标地址
DatagramPacket dp = new DatagramPacket(buffer,buffer.length,destAdd );

g.发送数据
server.send(dp);//利用Socket对象发送数据。

B.创建客户端(接收端)
打包本地机器地址及程序端口
SocketAddress localAddr = new InetSocketAddress("192.168.1.188",14000);//包装本地数据地址

b.创建用来接收消息的Socket对象
DatagramSocket receiveSocket = new DatagramSoket(localAddr );
c.创建指定大小的字节数组来装载接收数据
Byte[] buffer = new byte[20];
D.创建数据包用来接收数据
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);//这里装载的是字节数据包。

E.接收数据
receiveSocket.receive(packet);//从接收的Socket对象中读取数据到数据包。

给出UDP服务器端的代码
package UDPCOM;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;

/**
* UDP通信服务器
* @author DeopingXiong
*
*/
public class Sever {
public static void main(String args[]){//程序入口
try{
//1.创建要来发送的本地地址对象
SocketAddress localAddr = new InetSocketAddress("192.168.1.106",16000);
//2.接收服务器UDP端口
DatagramSocket recvSokect = new DatagramSocket(localAddr);
while(true){
//3.指定接收缓冲区大小
byte[] buffer = new byte[55];
//4.创建接收数据包对象,指定接收大小
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
recvSokect.receive(packet);//因为阻塞所以循环接收发送方发送的消息
//得到发送方的ip和端口
SocketAddress address = packet.getSocketAddress();
//转换接收到的数据为字符串
String msg = new String(packet.getData()).trim();
//接收到后,打印出接收到的数据
System.out.println("客户端:"+msg+"from:"+address);
}
}catch(Exception e){
e.printStackTrace();
}

}

}

三、UDP vs TCP
  UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。 TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。   相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。例如,一个位于客户端的应用程序向服务器发出了以下4个数据报   D1   D22   D333   D4444   但是UDP有可能按照以下顺序将所接收的数据提交到服务端的应用:   D333   D1   D4444   D22   事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值