为了账号安全,请及时绑定邮箱和手机立即绑定

为何在客户端创建多个DatagramSocket对象,会出现阻塞呢

package com.test;
/*
 * 客户端类
 */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class UDPclient {

	public static void main(String[] args) throws IOException {
		/*
		 * 向服务端发送信息
		 */
		//定义客户端地址、端口和数据
		InetAddress address=InetAddress.getLocalHost();
		int port=8800;
		byte[] data="user:tom;key:123".getBytes();
		//创建DatagramPacket对象,包含数据信息
		DatagramPacket packet=new DatagramPacket(data, data.length, address, port);
		//创建DatagramSocket对象
		DatagramSocket socket=new DatagramSocket();
		//发送数据
		socket.send(packet);
		/*
		 * 接收服务端信息
		 */
		//创建另一个DatagramSocket对象
		DatagramSocket socket2=new DatagramSocket();
		//创建数据报,用于接收信息
		byte[] data2=new byte[1024];
		DatagramPacket packet2=new DatagramPacket(data2, data2.length);
		//接收信息
		socket2.receive(packet2);
		//输出信息
		String reply=new String(data2);
		System.out.println("我是客户端,服务器说:"+reply);
		//关闭资源
		socket.close();
		socket2.close();

	}

}


正在回答

2 回答

刚刚有点问题,应该是在37行代码之前加一句socket2.send(packet)

0 回复 有任何疑惑可以回复我~

我没有实际运行你的代码,只是猜测一下:是否阻塞在代码的第37行了呢?

第37行socket2.receive(packet2);是在接受服务端的响应,但是你的这个socket2并没有向服务端发消息,所以也就不会收的服务端的响应。

可以尝试在37行代码之前加一句socket2.send(packet2);  看看是否还阻塞。



0 回复 有任何疑惑可以回复我~
#1

LBruce

你好,请问一下,要接收服务端的响应必须得先像服务端发送消息,是这样吗?
2018-02-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为何在客户端创建多个DatagramSocket对象,会出现阻塞呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信