A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫道荣 中级黑马   /  2013-3-23 00:26  /  1395 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 莫道荣 于 2013-3-23 19:09 编辑
  1. import java.net.*;
  2. import java.io.*;
  3. class  TCPClintSend
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket ds=new Socket(InetAddress.getByName("127.0.0.1"),10000);//创建tcp客户端套接字
  8.                 InputStream in=ds.getInputStream();//获取头解字的输入流
  9.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//获取键盘录入
  10.                 String res=br.readLine();
  11.                 PrintWriter out=new PrintWriter(ds.getOutputStream(),true);//获取套接字的输出流
  12.                 BufferedReader brln=new BufferedReader(new InputStreamReader(ds.getInputStream()));//获取套接字的输入流
  13.                 while ((res!=null))
  14.                 {
  15.                         if (res.equals("over"))
  16.                                 break;
  17.                         out.println(res);//向服务端发送数据
  18.                         System.out.println(brln.readLine());//接收服务端发送回来的数据并打印出来
  19.                 }
  20.                 ds.close();
  21.         }
  22. }
复制代码
这是服务端代码
  1. import java.net.*;
  2. import java.io.*;
  3. class TCPServer
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 ServerSocket ss=new ServerSocket(10000);//创建一个服务端套接字
  8.                 Socket s=ss.accept();//侦听客户端套接字
  9.                 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//获取客户端套接字的输入流
  10.                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);//获取客户端套接字的输出流
  11.                 String res=br.readLine();
  12.                 if (res!=null)
  13.                 {
  14.                         System.out.println(res);
  15.                         out.println("哈哈哈,我收到了");//向客户端输出
  16.                 }
  17.                 s.close();
  18.                 ss.close();
  19.         }
  20. }
复制代码
这是服务端代码


客户端和服务端取得链接之后,互相传输了一次数据之后就报了如图所示的错误了,想问问为啥???

未命名.jpg (89.23 KB, 下载次数: 8)

未命名.jpg

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-23 17:28

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 谢洋 于 2013-3-23 01:03 编辑


  • class TCPServer
  • {
  •         public static void main(String[] args) throws Exception
  •         {
  •                 ServerSocket ss=new ServerSocket(10000);//创建一个服务端套接字
  •                 Socket s=ss.accept();//侦听客户端套接字
  •                 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//获取客户端套接字的输入流
  •                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);//获取客户端套接字的输出流
  •                 String res=br.readLine();
  •                 if (res!=null)
  •                 {
  •                         System.out.println(res);
  •                         out.println("哈哈哈,我收到了");//向客户端输出
  •                 }
  •                s.close();服务端把连接断开了,但客户端还在读取数据
  •                 ss.close();
  •         }
  • }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你这个问题出在客户端的,你在while外部完成了阻塞式读取键盘的方法,这样你在while()里面判断res!=null是一直为真,则在循环体内会一直发送你第一次输入的内容,我把代码改成如下就好了;
while ((res=br.readLine())!=null)
                {
                        if (res.equals("over"))
                                break;
                        out.println(res);//向服务端发送数据
                        System.out.println(brln.readLine());//接收服务端发送回来的数据并打印出来
                }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马