黑马程序员技术交流社区
标题:
TCP通信套接字 报错
[打印本页]
作者:
莫道荣
时间:
2013-3-23 00:26
标题:
TCP通信套接字 报错
本帖最后由 莫道荣 于 2013-3-23 19:09 编辑
import java.net.*;
import java.io.*;
class TCPClintSend
{
public static void main(String[] args) throws Exception
{
Socket ds=new Socket(InetAddress.getByName("127.0.0.1"),10000);//创建tcp客户端套接字
InputStream in=ds.getInputStream();//获取头解字的输入流
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//获取键盘录入
String res=br.readLine();
PrintWriter out=new PrintWriter(ds.getOutputStream(),true);//获取套接字的输出流
BufferedReader brln=new BufferedReader(new InputStreamReader(ds.getInputStream()));//获取套接字的输入流
while ((res!=null))
{
if (res.equals("over"))
break;
out.println(res);//向服务端发送数据
System.out.println(brln.readLine());//接收服务端发送回来的数据并打印出来
}
ds.close();
}
}
复制代码
这是服务端代码
import java.net.*;
import java.io.*;
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();
}
}
复制代码
这是服务端代码
客户端和服务端取得链接之后,互相传输了一次数据之后就报了如图所示的错误了,想问问为啥???
未命名.jpg
(89.23 KB, 下载次数: 26)
下载附件
2013-3-23 00:24 上传
作者:
谢洋
时间:
2013-3-23 01:02
本帖最后由 谢洋 于 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();
}
}
作者:
VOIDMAIN
时间:
2013-3-23 01:23
你这个问题出在客户端的,你在while外部完成了阻塞式读取键盘的方法,这样你在while()里面判断res!=null是一直为真,则在循环体内会一直发送你第一次输入的内容,我把代码改成如下就好了;
while ((res=br.readLine())!=null)
{
if (res.equals("over"))
break;
out.println(res);//向服务端发送数据
System.out.println(brln.readLine());//接收服务端发送回来的数据并打印出来
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2