/*****************************以下是客户端的代码******************************/
import java.io.*;
import java.net.*;
public class client {
public static void main(String[] args) throws  IOException {
String serverIP="122.207.171.140";
int serverPort=4567;
Socket socket=new Socket(serverIP , serverPort );

InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

//向服务端发送数据
byte[] data="Hello,你好,我是杨飞龙".getBytes();
out.write(data);

//读取从服务端发送来的数据
int c;
byte[] dataFromServ = null;
while((c=in.read(dataFromServ))==-1)
{
System.out.println("从服务器接收到的数据为:"+new String(dataFromServ));
}
socket.close();

}}这是运行以后的控制台信息:
Exception in thread "main" java.lang.NullPointerException
at java.net.SocketInputStream.read(Unknown Source)
at client.main(client.java:26)import java.io.*;
import java.net.*;/******************************以下是服务端的代码**********************************/
public class server { public static void main(String[] args) throws IOException {
int serverPort=4567;
ServerSocket serverSocket=new ServerSocket(serverPort);

while(true)
{
Socket socket=serverSocket.accept();

InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

//向客户端发送数据
byte[] dataSendToClient="杨,收到你的信息了".getBytes();
out.write(dataSendToClient);

int c;
byte[] dataReceivedFromClient=null;
while((c = in .read(dataReceivedFromClient))==-1)
{
System.out.println("从客户端接受到的数据为:"+new String(dataReceivedFromClient));
}
}
}}运行后的控制台信息:
Exception in thread "main" java.lang.NullPointerException
at java.net.SocketInputStream.read(Unknown Source)
at server.main(server.java:27)为什么客户端接收不到服务端发送的信息,服务端也接收不到客户端的信息???(我的机子没有联网,但是这两段代码都在我自己的机子上运行的,这会不会和我没联网有关啊???)

解决方案 »

  1.   

    1.读写的顺序,不对,两端都是先写后读,都阻塞住了。把server改成先读后写。
    2.另外write后没有flush,内容还在本地缓冲中。
      

  2.   

    这段代码....,首先在read方法中使用的缓冲数组为null,所以会报一个空指针错
    服务器端接收的while语句条件不对,应该是读到最后的时候是-1改成!=-1
    然后客户端的ip连接最好设成127.0.0.1,
    读写的顺序不是很对,最好给读写其中之一起一个线程
      

  3.   

    不用out.write(data);
    用out.println(data)试一下;
      

  4.   


    public class client {
    public static void main(String[] args) throws IOException {
    String serverIP = "localhost";
    int serverPort = 4567;
    Socket socket = new Socket(serverIP, serverPort);
    InputStream in = socket.getInputStream();
    OutputStream out = socket.getOutputStream();

    // 向服务端发送数据
    byte[] data = "Hello,你好,我是杨飞龙\r\n".getBytes();
    out.write(data);
    socket.shutdownOutput();

    // 读取从服务端发送来的数据
    int c;
    byte[] dataFromServ = new byte[1024];
    while ((c = in.read(dataFromServ)) != -1) {
    System.out.println("从服务器接收到的数据为:" + new String(dataFromServ,0,c));
    }
    in.close();
    out.close();
    socket.close();
    }
    }
    public class server {
    public static void main(String[] args) throws IOException {
    int serverPort = 4567;
    ServerSocket serverSocket = new ServerSocket(serverPort);
    while (true) {
    Socket socket = serverSocket.accept();
    InputStream in = socket.getInputStream();
    OutputStream out = socket.getOutputStream();

    // 读取客户端的数据
    int c;
    byte[] dataReceivedFromClient =  new byte[1024];
    while ((c = in.read(dataReceivedFromClient)) != -1) {
    System.out.println("从客户端接受到的数据为:"
    + new String(dataReceivedFromClient,0,c));
    }
    // 向客户端发送数据
    byte[] dataSendToClient = "杨,收到你的信息了\r\n".getBytes();
    out.write(dataSendToClient);

    out.close();
    in.close();
    socket.close();
    }
    }
    }
      

  5.   

    http://blog.csdn.net/closewbq/article/details/5751738
      

  6.   

    在服务器端向客户端发送消息时,应该要flush一下的!