0

服务器程序:

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);
                }
        }
}

我面临的问题是:

  1. 没有输出。
  2. 未指示异常/错误。

如果我做错了什么,请解释我。问题可能是客户端在服务器读取时没有写入任何内容。

4

2 回答 2

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();

请注意,您只是在这里写一次....对于连续读写,您必须循环运行....或者同时运行多个客户端...您必须执行每个套接字连接(在接受它)进入服务器端的不同线程

于 2013-11-06T08:24:16.580 回答
2

在客户端程序中写入流后关闭流 br.close();

写入流后,必须关闭流或刷新流(br.flush()),因为当流关闭时,只能读取该流。I/O 操作不能同时在同一个流上执行。

两个套接字由同一流连接,因此不能在该流上同时执行 I/O 操作。

于 2013-11-06T08:26:49.547 回答