基于TCP协议的Socket通信的一个问题---急
学习Socket通信,基于TCP协议编写了一个服务器端和客户端程序,
目的就是服务器端和客户端分别输出对方发来的字符串。
代码分别如下:
import java.net.ServerSocket;
import java.net.Socket;
import
java.net.SocketException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import
java.io.IOException;
public class Server {
public static void main(String args[]) throws
IOException,
SocketException {
ServerSocket server=new ServerSocket(8000);
System.out.println("服务器已经启动......");
Socket s=server.accept();
InputStream in=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(in));
System.out.println(br.readLine());
OutputStream out=s.getOutputStream();
out.write("welcome to visit Server".getBytes());
out.flush();
br.close();
s.close();
server.close();
}
}
客户端代码如下:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String args[]) throws IOException,SocketException
{
Socket client=new Socket("127.0.0.1",8000);
OutputStream out=client.getOutputStream();
out.write("hello Server".getBytes());
out.flush();
InputStream in=client.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(in));
System.out.println(br.readLine());
out.close();
br.close();
client.close();
}
}
在命令提示符窗口中先启动服务器端程序,然后在另一窗口中启动客户端程序,
运行的结果是两段都处于阻塞状态了,没有输出对方发来的字符串,请问原因是什么,程序如何修改?
请高手指点,,,,谢谢了 急盼回复。。。。。。。。。。。
------解决方案--------------------
客户端在发送信息时,把回车换行符也加上
Java code
OutputStream out=client.getOutputStream();
out.write("hello Server\r\n".getBytes());
out.flush();
------解决方案--------------------
两个程序BufferedReader br=new BufferedReader(new InputStreamReader(in));
改为BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
in为类System的常量。
由于两个程序没有采用循环,因此服务器可接受到hello Server,客户机可接受到welcome to visit Server各一次OK!
------解决方案--------------------
ReadLine的特性:只有读到换行符才算读到一次数据,所以你的Server会堵塞,因为一直读不到换行。所以你要在字符串后加换行符。即
out.write("welcome to visit Server\n".getBytes());
out.write("hello Server\n".getBytes());