dragon87211 2011-12-05 17:03
浏览 262
已采纳

java socket 编程遇到的问题

最近初步学习java socket 编程的时候遇到一个问题就是,当客户端向服务端发送数据时,会出现不能输入也不能,程序卡住的现象,尤其是中文,最多输入两行,控制台就不能再输入数据(客户端输入是用system.in来从键盘获取数据)。英文字符还好一些,但也会出现此种状况,百思不得其解!代码如下:[code="java"][/code]
server:
package dragon.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {

/**
 * @param args
 * @throws IOException 
 */

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ServerSocket ss = null;
    PrintWriter out = null;
    BufferedReader in = null;


    try {
        ss = new ServerSocket(1111);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        System.err.println("could not listen port:1111");
        System.exit(1);
        e.printStackTrace();
    }
    Socket inComing = null;
    while(true){
        inComing = ss.accept();
        out = new PrintWriter(inComing.getOutputStream(),true);
        in = new BufferedReader(new InputStreamReader(inComing.getInputStream(),"GBK"));
        out.println("hello!....");
        out.println("enter BYE to exit");
        out.flush();

        while(true){
            String str = in.readLine();
            if(str==null){
                break;
            }
            else{
                out.println("Echo:"+str);
                System.out.println(str);
                out.flush();
                if(str.trim().equalsIgnoreCase("BYE")){
                    break;
                }
            }
        }

        out.close();
        inComing.close();
        ss.close();
    }

}

}
client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
public static void main(String[] args) throws IOException {
Socket s = null;
PrintWriter out = null;
BufferedReader in = null;

    try {
        s = new Socket("localhost", 1111);
        out = new PrintWriter(s.getOutputStream(),true);
        in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println(in.readLine());
    System.out.println(in.readLine());
    BufferedReader stdln = new BufferedReader(new InputStreamReader(System.in));
    String userInput;
    while((userInput=stdln.readLine())!=null){
        out.println(userInput);
        System.out.println(in.readLine());
    }
    out.close();
    in.close();
    s.close();
}

}

  • 写回答

3条回答

  • 飞猪it 2011-12-07 15:10
    关注

    我想是因为,在客户端,你的输入对象是控制台,这个时候控制台就相当于一个记事本了,你想在什么地方输入,就在什么输入,当然是可以输入的地方。例如下一行和已经输入过的地方,因为这戏地方,都有了占位符,一旦你敲入回车键,那么就readLine了,接着就到服务器端了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?