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

来源:4-2 编程实现基于 UDP的 Socket 通信之服务器端

夜还没黑

2016-07-02 17:24

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回答

  • bigfire
    2016-07-02 22:50:10

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

  • bigfire
    2016-07-02 22:47:11

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

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

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



    LBruce

    你好,请问一下,要接收服务端的响应必须得先像服务端发送消息,是这样吗?

    2018-02-09 09:09:48

    共 1 条回复 >

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125013 学习 · 590 问题

查看课程

相似问题