服务器程序:
import java.io.*;
import java.net.*;
public class server
{
public static void main(String args[])
{
try
{
ServerSocket ss=new ServerSocket(2000);
Socket s=ss.accept();
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str;
while((str=br.readLine())!=null)
{
System.out.println(str);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
客户计划:
import java.net.*;
import java.io.*;
public class client
{
public static void main(String args[])
{
try
{
Socket s=new Socket("127.0.0.1",2000);
String str;
BufferedWriter br=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
br.write("\nHello World\n");
}
catch(Exception e)
{
System.out.println(e);
}
}
}
我面临的问题是:
如果我做错了,请解释我。问题可能是客户端在服务器读取时没有写任何内容。
答案 0 :(得分:2)
请添加一些调试语句以检查
(1)是否能够与运行服务器建立连接的客户端。所以在服务器部分添加
Socket s=ss.accept();
System.out.println("one new connection");
(2)在客户端程序中也在br.write行之后添加flush()
br.write("\nHello World\n");
br.flush()
// use the below statement as well at last (if you no longer want to use the output stream)
br.close();
请注意你只是在这里写一次....对于连续阅读和写作,你必须在循环中运行.... 要么 同时运行多个客户端...您必须在服务器端执行每个套接字连接(在接受它之后)到不同的线程
答案 1 :(得分:2)
在客户端程序中写入流后关闭流
br.close();
写入流之后,必须关闭流或刷新流(br.flush()
),因为当流关闭时,只能读取该流。
I / O操作不能同时在同一个流上执行。
两个套接字通过相同的流连接,因此无法在该流上同时执行I / O操作。