客户端不能将接收到信息完全打印出来,请问是怎么回事呢?(客户端显示在代码后)

来源:4-3 编程实现基于 UDP 的 Socket 通信之客户端

未陌

2016-02-01 21:44

/*
*UDP服务端
*/

package com.imooc;


import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;


public class UDPserver {

UDPserver() throws IOException{

DatagramSocket ds = new DatagramSocket(5555);

byte[] b = new byte[2048];

DatagramPacket dp = new DatagramPacket(b,0,b.length);

ds.receive(dp);

String s = new String(b);

System.out.println("我是服务器,客户端说: "+s);

InetAddress address = InetAddress.getByName("localhost");

int port = dp.getPort();

byte[] b1 = new byte[2048];

b1= "客户端你好,你的信息已经收到,我是服务器".getBytes();

DatagramPacket dp2 = new DatagramPacket(b1,0,b1.length,address,port);

ds.send(dp2);

ds.close();

}

public static void main(String[] args) throws IOException {

UDPserver us = new UDPserver();

}

}

/*
*UDP客户端
*/

package com.imooc;


import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;


public class UDPclient {

public static void main(String[] args) throws IOException{


DatagramSocket ds = new DatagramSocket();

InetAddress address = InetAddress.getByName("localhost");

int port = 5555;

byte[] b = new byte[2048];

b ="用户名:1;密码:2".getBytes();

DatagramPacket dp = new DatagramPacket(b,b.length,address,port);

ds.send(dp);

DatagramPacket dp1 = new DatagramPacket(b,b.length);

ds.receive(dp1);

String s1 = new String(b);

System.out.println("我是客户端,服务器说:  "+s1);

ds.close();

}

}

客户端打印:

客户端你好,你?

写回答 关注

4回答

  • Airly
    2016-10-25 16:19:02

    你前面那个服务器端的代码都没有放到main方法里去。

    UDPserver us = new UDPserver();

    你用的这种方式根本就不能够调用上面的那些方法,因为这个是创建实例对象......而你想要的是运用那些方法。

  • lxlacie
    2016-07-06 11:13:24

    接受客户端信息时:String s1 = new String(b);应该修改为String s1 = new String(b,0,dp1.getLength());

  • Zoya
    2016-04-27 20:44:16

    byte[] b = new byte[2048];

    b ="用户名:1;密码:2".getBytes();

    byte[] b1 = new byte[2048];

    b1= "客户端你好,你的信息已经收到,我是服务器".getBytes();

    你分别给b和b1都赋值了,所以他们的长度都改变了,当你用b来接受b1时,由于b的长度比b1短,所以接收不完。

  • Starryi
    2016-02-02 14:46:11

    System.out.println("我是服务器,客户端说: "+s);

    InetAddress address = InetAddress.getByName("localhost");

    int port = dp.getPort();


    address 弄粗了,应该发往的地址是 InetAddress address = packet.getAddress();


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

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

125013 学习 · 590 问题

查看课程

相似问题