各位老师请教个关于Socket实现双向通信的问题,直接贴代码吧
server端:import java.net.*;
import java.io.*;class TalkServer
{
public static void main(String[] args) {
try
{
ServerSocket server = new ServerSocket(5000);
while (true)
{
Socket client = server.accept();
PrintWriter pw = new PrintWriter(client.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("hha");
pw.write("server已通过你的连接");
pw.flush();
System.out.println("haha");
/*System.out.println(br.readLine());
System.out.println("haha");
br.close();*/       //这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待
pw.close();
client.close();
}
}
catch (IOException e)
{
System.out.println("error:" + e);
}

}
}client端:import java.net.*;
import java.io.*;class TalkClient
{
public static void main(String[] args) {
try
{
Socket client = new Socket("localhost",5000);
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter pw = new PrintWriter(client.getOutputStream());
System.out.println("hhah");
System.out.println(br.readLine());
System.out.println("haha");
pw.write("你好server");
pw.flush();
pw.close(); br.close();
client.close();
}
catch (IOException e)
{
System.out.println("error:" + e);
} }
}ctrl+c后打印的信息是:
D:\java\socket>java TalkServer
hha
haha
error:java.net.SocketException: Connection reset这应该是属于哪里的问题呢

解决方案 »

  1.   

    我知道你意思,你现在是因为2边都在互相等待对面发信息过来,就互相阻塞了,所以//这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待就这样,只要有个明确的信息说,读完了,就会继续往下走了
      

  2.   

    BufferedReader.readLine()
    BufferedWriter.newLine()
    这个2个才是,上面的方法名记错了
      

  3.   


    ///代码没问题,少了个回车符,代表一行的结束是回车符
    import java.net.*;
    import java.io.*;class TalkServer {    public static void main(String[] args) {
            try {
                ServerSocket server = new ServerSocket(5000);
                while (true) {
                    Socket client = server.accept();
                    PrintWriter pw = new PrintWriter(client.getOutputStream());
                    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    System.out.println("hha");
                    pw.write("server已通过你的连接\n");///////这里加个回车,分行
                    pw.flush();
                    System.out.println("haha");
                    System.out.println(br.readLine());
                    System.out.println("haha");
                    br.close(); //这段内容注释掉程序运行完全正常,只有这段话启用了server和client就一直傻傻的等待
                    pw.close();
                    client.close();
    //                server.close();
                }
            } catch (IOException e) {
                System.out.println("error:" + e);
            }    }
    }import java.net.*;
    import java.io.*;class TalkClient {    public static void main(String[] args) {
            try {
                Socket client = new Socket("localhost", 5000);
                BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));            PrintWriter pw = new PrintWriter(client.getOutputStream());
                System.out.println("hhah");
                System.out.println(br.readLine());
                System.out.println("haha");
                pw.write("你好server\n");///////这里加个回车,分行
                pw.flush();
                pw.close();            br.close();
                client.close();
            } catch (IOException e) {
                System.out.println("error:" + e);
            }    }
    }
      

  4.   

    恩,可以了,问下啊为什么一定要加\n呢我用println和print也分别试了,不管是在哪里换行,只要换行就行了,是不是用print流就一定要换行的
      

  5.   

    以后用printwriter就用用println方法了,错不了