黑马程序员技术交流社区
标题:
TCP客户端和服务端传输的问题
[打印本页]
作者:
练习题
时间:
2014-8-28 11:03
标题:
TCP客户端和服务端传输的问题
本帖最后由 练习题 于 2014-8-28 11:07 编辑
//这是客户端的代码import java.net.*;
import java.io.*;
class TCPClient2
{
public static void main(String[] args)throws Exception
{
Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(),10010);
OutputStream os = socket.getOutputStream();
os.write("tcp数据来了".getBytes());
InputStream is = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
String str = "";
while((len = is.read(buf))!= -1)
{
str = str + new String(buf,0,len);
}
System.out.println(str); socket.close();
}
}//这是服务端的代码
import java.net.*;
import java.io.*;
class TCPServer2
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10010 );Socket socket = ss.accept(); //因为这个客户端对象发送数据,那么我们就可以用这个客户端读取数据
InputStream is = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
String str ="";
while((len = is.read(buf)) != -1)//阻塞方法
{
str += str + new String(buf,0,len);
}
System.out.println("IP:"+socket.getInetAddress().getHostAddress()+" 数据:"+str); //返回数据给客户端
OutputStream os = socket.getOutputStream();
os.write("服务端数据已经收到,谢谢".getBytes());
//关闭资源
socket.close();
ss.close();
}
}
复制代码
看半天实在招不到问题在哪,我这边的问题就是客户端和服务端都出现阻塞的状态,没有任何反应.之前测试客户端给服务端发数据 服务端是可以接受到的,现在就是要让服务端返回数据给客户端,就不行了. 求大神们帮帮忙!
作者:
依然超级赛亚人
时间:
2014-8-28 13:07
本帖最后由 依然超级赛亚人 于 2014-8-28 13:11 编辑
你把while这个外套去了,因为你用了循环方式去读写,但是没加结束标记,这简单的几个字不用循环就行,1024的字节数组足够装了,只用read(buf,0,len)再试试吧。
作者:
笑脸迷人
时间:
2014-8-28 14:13
见毕老师的视频吧!
楼上说的不错:是因为没有结束标记的原因,自定义结束标记比较麻烦,但Socket提供了这个方法
shutdownOutput()
在Socket客服端和服务端的输出流结束后使用这个方法就好了~
作者:
练习题
时间:
2014-8-28 15:56
依然超级赛亚人 发表于 2014-8-28 13:07
你把while这个外套去了,因为你用了循环方式去读写,但是没加结束标记,这简单的几个字不用循环就行,1024 ...
谢谢!!谢谢!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2