简单的客户端服务器程序不工作

时间:2013-11-06 08:18:25

标签: java sockets serversocket bufferedwriter

服务器程序:

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. 未显示异常/错误。
  3. 如果我做错了,请解释我。问题可能是客户端在服务器读取时没有写任何内容。

2 个答案:

答案 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操作。