黑马程序员技术交流社区
标题:
大家帮看看我做的TCP简单通信 总是运行不出来 拜求问题
[打印本页]
作者:
宗士为
时间:
2012-5-18 19:30
标题:
大家帮看看我做的TCP简单通信 总是运行不出来 拜求问题
刚做了个简单的TCP
先说下需求吧:
//通过客户端键盘录入单词,并发送到服务端。//服务端在控制台打印后,将该单词转成大写再发回客户端。
检查了好多遍了 不知哪里出错 】
导致客户端输入的不能在服务端转成大写还给客户端
public class ClientDemo {
public static void main(String[] args) throws Exception, IOException {
// 创建Socket对象 给服务端的ip 和 端口号
Socket socket = new Socket("10.1.31.66", 10123);
// 获取输入流
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int a = in.read(buffer);
System.out.println(new String(buffer,0,a));
// 获取输出流
OutputStream out = socket.getOutputStream();
InputStream i = System.in;
byte[] buff = new byte[1024];
int b = i.read(buff);
out.write(buff, 0, b);
}
}
public class ServerDemo {
public static void main(String[] args) throws Exception {
// 创建TCP的端口并监听
ServerSocket server = new ServerSocket(10123);
// 获得客服对象
Socket socket1 = server.accept();
// 获得客服对象ip
String ip = server.getInetAddress().getHostAddress();
System.out.println(ip + "-------ing");
// 获得对象的输入流
while(true) {
InputStream in = socket1.getInputStream();
byte[]buffer = new byte[1024];
int b = in.read(buffer);
System.out.println(new String(buffer,0,b));
// 获得对象的输出流
OutputStream out = socket1.getOutputStream();
byte[]buff = (new String(buffer,0,b).toUpperCase()).getBytes();
out.write(buffer);
}
}
}
作者:
李保成
时间:
2012-5-18 19:45
初步猜想是这样,socket通讯它是阻塞式方式,如果服务器端没有接受到特殊字符的结束标记,它会默认为还在写入,那么这时候它一直在等待,而客户端那边也同样在等待返回数据,这样两端等待造成了一个假死的现象。毕导的视频里应该提到过,建议仔细看一下。谢谢、
作者:
宗士为
时间:
2012-5-18 20:02
踩单车的幸福 发表于 2012-5-18 19:45
初步猜想是这样,socket通讯它是阻塞式方式,如果服务器端没有接受到特殊字符的结束标记,它会默认为还在写 ...
我在客服端那边System。in输入同样的没反应
作者:
李保成
时间:
2012-5-18 20:04
确定一下,服务器打开了吗?你的客户端连接的10.1.31.66是你本机的IP地址吗
作者:
赵孟恩
时间:
2012-5-18 20:04
public class ClientDemo {
public static void main(String[] args) throws Exception, IOException {
// 创建Socket对象 给服务端的ip 和 端口号
Socket socket = new Socket("10.1.31.66", 10123);
// 获取输入流
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int a = in.read(buffer);
//你这里顺序不对 read是阻塞式方法,在这直接阻塞等这从服务端接收数据,就往下不运行了,先向服务端发送在接收
System.out.println(new String(buffer,0,a));
// 获取输出流
OutputStream out = socket.getOutputStream();
InputStream i = System.in;
byte[] buff = new byte[1024];
int b = i.read(buff);
out.write(buff, 0, b);
}
}
public class ServerDemo {
public static void main(String[] args) throws Exception {
// 创建TCP的端口并监听
ServerSocket server = new ServerSocket(10123);
// 获得客服对象
Socket socket1 = server.accept();
// 获得客服对象ip
String ip = server.getInetAddress().getHostAddress();
System.out.println(ip + "-------ing");
// 获得对象的输入流
while(true) {
InputStream in = socket1.getInputStream();
byte[]buffer = new byte[1024];
int b = in.read(buffer);
System.out.println(new String(buffer,0,b));
// 获得对象的输出流
OutputStream out = socket1.getOutputStream();
byte[]buff = (new String(buffer,0,b).toUpperCase()).getBytes();
out.write(buffer); //
这里应该是buff
}
//你这客户端只发送一次就结束了,而你这服务端却一直在这从这流接收数据,会报错的, 建议再仔细看看毕老师的视频
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2