`
lfc_jack
  • 浏览: 138240 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

基于UDP协议的Socket编程

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

下面是基于UDP协议写的客户端与服务端实现通信的代码。

第一步:写一个java project,一个client  一个Server





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

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();
		}
		
		

	}

}



第三步,编写客户端的代码如下:

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();
		
	}

}



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





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




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





  • 大小: 9.4 KB
  • 大小: 6.9 KB
  • 大小: 11.4 KB
  • 大小: 10.6 KB
分享到:
评论
1 楼 魏叔武 2016-10-28  

相关推荐

Global site tag (gtag.js) - Google Analytics