java socket int_关于java socket的readInt的问题

我有一段代码while(bConnected){//是否成功连接标志正确true时,无限循环监听用户发来的信息dl=dis.readInt();//读取接收到的包头的值System.out.println("要读的包长度:"+dl);dis.r...

我有一段代码

while (bConnected) {// 是否成功连接标志正确true时,无限循环监听用户发来的信息

dl = dis.readInt();// 读取接收到的包头的值

System.out.println("要读的包长度:"+dl);

dis.read(buf, 0, dl);// 读取长度为dl的包信息内容

parse(is);// 调用解析消息的方法

}

为什么连接成功之后,大部分情况都挺好的,通信正常。

可以同样的操作,在有些时候会出现这样的状况。

客户连接服务器成功之后,服务器阻塞在readInt这里等待用户发送信息,这时用户向服务器发送信息,结果客户端没有任何反应。无论等待多久都没有反应。

当我把客户端关闭的时候,一关掉客户端服务器哪里马上就显示接收到了信息,而且还是我客户端发送想信息没错。

这是什么原因,向高手请教,有什么办法解决让客户端发送信息后,不会要等到客户端关闭服务器才有接收的反应。

java部分:

ServerSocket ss= new ServerSocket(8888);

boolean fwqStart= true;

Socket s = ss.accept();

this.dis= new DataInputStream(s.getInputStream());

int dl;

while(true) {

bais.reset();

is.reset();

dl= dis.readInt();

System.out.println("要读的包长度:" + dl);

}

}

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的网络编程中,传输数组可以使用对象流(ObjectOutputStream / ObjectInputStream)或字节流(DataOutputStream / DataInputStream)来实现。 使用对象流传输数组的步骤如下: 1. 在发送端,创建一个对象输出流(ObjectOutputStream)并将其连接到网络输出流,例如Socket的输出流。 2. 将要传输的数组写入对象输出流。 3. 在接收端,创建一个对象输入流(ObjectInputStream)并将其连接到网络输入流,例如Socket的输入流。 4. 从对象输入流中读取传输的数组。 示例代码如下: 发送端(服务器): ```java int[] array = {1, 2, 3, 4, 5}; try (Socket socket = new Socket("localhost", 12345); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream())) { out.writeObject(array); out.flush(); } catch (IOException e) { e.printStackTrace(); } ``` 接收端(客户端): ```java try (ServerSocket serverSocket = new ServerSocket(12345); Socket socket = serverSocket.accept(); ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) { int[] array = (int[]) in.readObject(); // 使用接收到的数组 } catch (IOException | ClassNotFoundException e) { e.printStackTrace();} ``` 使用字节流传输数组的步骤如下: 1. 在发送端,创建一个数据输出流(DataOutputStream)并将其连接到网络输出流,例如Socket的输出流。 2. 使用数据输出流将数组的长度写入网络输出流。 3. 使用数据输出流将数组的每个元素写入网络输出流。 4. 在接收端,创建一个数据输入流(DataInputStream)并将其连接到网络输入流,例如Socket的输入流。 5. 从数据输入流中读取数组的长度。 6. 从数据输入流中读取数组的每个元素。 示例代码如下: 发送端(服务器): ```java int[] array = {1, 2, 3, 4, 5}; try (Socket socket = new Socket("localhost", 12345); DataOutputStream out = new DataOutputStream(socket.getOutputStream())) { out.writeInt(array.length); for (int i : array) { out.writeInt(i); } out.flush(); } catch (IOException e) { e.printStackTrace(); } ``` 接收端(客户端): ```java try (ServerSocket serverSocket = new ServerSocket(12345); Socket socket = serverSocket.accept(); DataInputStream in = new DataInputStream(socket.getInputStream())) { int length = in.readInt(); int[] array = new int[length]; for (int i = 0; i < length; i++) { array[i] = in.readInt(); } // 使用接收到的数组 } catch (IOException e) { e.printStackTrace(); } ``` 这些示例代码展示了如何在Java的网络编程中传输数组,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值