基于UDP协议的Socket编程

TCP的可靠保证,是它的三次握手机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的。主要需要关注的还是TCP/IP协议的socket编程

下面是基于UDP协议写的客户端与服务端实现通信的代码。
[b]
第一步:写一个java project,一个client 一个Server[/b]

[img]http://dl2.iteye.com/upload/attachment/0120/7744/d93f0ca8-1ce9-3cee-ae56-726a668df121.png[/img]


[b]第二步骤:编写服务器端的代码如下:[/b]


package com.udp.socket.server;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;

/**
* 基于DUP协议的服务器端的代码
* @author lfc
*
*/
public class server {

public static void main(String[] args) {
try {
// 1,创建服务器端,绑定端口
DatagramSocket ds=new DatagramSocket(8800);
// 2,确定接收数据包的数据的大小
byte[] by=new byte[1024];
// 3,创建接收数据包的数据类型,数据存储在数组中
DatagramPacket dp=new DatagramPacket(by, by.length);
// 4,通过套字节接收数据
ds.receive(dp);
// 5,解析客户端发送过来的数据
String string=new String(by,0,dp.getLength());
//打印来自客户端的信息
System.out.println("客户端发送过来的信息是:"+string);
//当收到客户端发送过来的信息后,服务器端自动回答一个信息
String hello="hello!";
byte[] reply=hello.getBytes();
//获取发送信息过来的客户端的ip地址
SocketAddress sa=dp.getSocketAddress();
//数据放入数据包中准备发送给客户端,三个参数,发送的内容,长度,以及客户端的ip地址
DatagramPacket dp2=new DatagramPacket(reply,reply.length,sa);
//发送给客户响应信息开始
ds.send(dp2);
// 6,关闭资源
ds.close();
} catch (SocketException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}



}

}



[b]第三步,编写客户端的代码如下:[/b]


package com.udp.socket.client;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;


/**
* 基于UDP协议的客户端代码
*
* @author lfc
*
*/
public class client {

public static void main(String[] args) {

// 1,创建客户端,确定发送到服务器端的ip以及端口
String info="你好,在吗?";
byte[] by=info.getBytes();
InetAddress ia=null;
try {
ia=InetAddress.getByName("localhost");
} catch (UnknownHostException e) {

e.printStackTrace();
}
// 2,创建数据包,指定数据包的长度并且发送到服务器ip的指定端口
int port=8800;
DatagramPacket dp=new DatagramPacket(by, by.length,ia,port);
// 3,创建DatagramSocket对象
DatagramSocket ds=null;
try {
ds=new DatagramSocket();
} catch (SocketException e) {

e.printStackTrace();
}
// 4,向服务器发送数据包
try {
ds.send(dp);
} catch (IOException e) {

e.printStackTrace();
}
byte[] receive=new byte[1024];
//客户端创建接收数据包的数据类型,数据存储在数组中
DatagramPacket dpre=new DatagramPacket(receive, receive.length);
// 客户端通过套字节接收数据
try {
ds.receive(dpre);
} catch (IOException e) {

e.printStackTrace();
}
//输出服务器给客户端的响应信息
String string=new String(receive,0,receive.length);
System.out.println("服务器响应的信息是:"+string);
// 5,关闭资源
ds.close();

}

}



[b]第四步:运行服务器端的代码,控制台显示处于监听状态:结果如下图[/b]

[img]http://dl2.iteye.com/upload/attachment/0120/7746/00a16d56-cc05-3d01-a967-f23b65359825.png[/img]


[b]第五步,运行客户端的代码,此时服务端收到客户端发送过来的信息:[/b]


[img]http://dl2.iteye.com/upload/attachment/0120/7748/7dfc81d0-a907-3a5c-9760-9461320a4f6a.png[/img]

[b]我们再去查看客户端的控制台,发现控制台输出服务器端发送过来的响应信息:[/b]


[img]http://dl2.iteye.com/upload/attachment/0120/7750/d4b5f8f4-3c51-314b-a094-4a5d4e7e3309.png[/img]

你可能感兴趣的:(socket,udp,java基础)