黑马程序员技术交流社区

标题: 谁帮我看一下,用TCP写的cs程序,哪里出错了 [打印本页]

作者: zgjswp    时间: 2015-3-8 21:37
标题: 谁帮我看一下,用TCP写的cs程序,哪里出错了
题目是:
使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

下面是我写的代码,为啥在Client端获取不到输入的数据呢?求解
-------------------------------------------------------------------------------------
服务器端:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private static ServerSocket server;
    public static void main(String[] args) throws Exception {
        server = new ServerSocket(6000);
        while (true) {
            Socket client = server.accept();
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream(client.getOutputStream());
            String s_previous = inFromClient.readLine();
            //StringBuffer s_temp = new StringBuffer(s_previous);
            //String s_later = s_temp.reverse().toString();
            outToClient.writeBytes(new StringBuffer(s_previous).reverse().toString());
        }
    }
}
-------------------------------------------------------------------------------------
客户端:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Socket client = new Socket("127.0.0.1",6000);
        DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
        String s_previous = inFromUser.readLine();
        outToServer.writeBytes(s_previous + '\n');
        String s_later = inFromServer.readLine();
        System.out.println("From Server:" + s_later);
        client.close();
    }
}


作者: zgjswp    时间: 2015-3-9 01:15
终于解决了,原来服务器端的outToClient没有关闭
作者: zgjswp    时间: 2015-3-9 13:52
zgjswp 发表于 2015-3-9 01:15
终于解决了,原来服务器端的outToClient没有关闭

早上发现错误了,睡了一觉有了我的理解:当服务器端的outToClient不关闭的时候,一直在等待客户端的输入,无法判断客户端何时结束
作者: Mr.南郭    时间: 2015-3-11 16:48
服务器端加入Server.close();
作者: zgjswp    时间: 2015-3-11 21:20
Mr.南郭 发表于 2015-3-11 16:48
服务器端加入Server.close();

关了服务器端不就停止工作了吗
作者: Mr.南郭    时间: 2015-3-11 23:01
zgjswp 发表于 2015-3-11 21:20
关了服务器端不就停止工作了吗

你说的对,但是你的解决方法我木有看懂,我太菜了
作者: wf111sxwf    时间: 2015-3-11 23:17
你可以使用 new Prinwriter(outputStream,ture);来获取一个自动刷新的  输出流 用println方法 去打印的要响应的数据  就不会有你的问题了  凡是这种收不到数据的问题 都是输出流刷新的问题
作者: 守护莹到老    时间: 2015-3-11 23:21
完全看不懂
作者: zgjswp    时间: 2015-3-12 00:08
wf111sxwf 发表于 2015-3-11 23:17
你可以使用 new Prinwriter(outputStream,ture);来获取一个自动刷新的  输出流 用println方法 去打印的要 ...

好的,我得试试看
作者: zgjswp    时间: 2015-3-12 00:09
守护莹到老 发表于 2015-3-11 23:21
完全看不懂

这是Socket通信啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2