java中用Socket向ServerSocket发送信息,ServerSocket用接收到的Socket返回一条信息,但是返回时报错...
Socket发送时不报错,ServerSocket可以接收,ServerSocket返回时报Socketisclosed错误,我并没有关闭Socket,只是在Socket...
Socket发送时不报错,ServerSocket可以接收,ServerSocket返回时报Socket is closed错误,我并没有关闭Socket,只是在Socket使用OutputStream发送完信息将OutputStream流关闭,请问怎么解决?
服务端这样写:
ServerSocket server = new ServerSocket(SERVERPORT); while(flag) { Socket s = server.accept();
InputStream in = s.getInputStream(); byte[] bytes = new Byte[1024];
int i=0, t=0;
while((t=in.read()) != -1) {
bytes[i] = (byte)t;
i++;
}
String str = new String(bytes);
System.out.println(str); OutputStream out = s.getOutputStream();
String msg = "hello client";
out.write(msg.getBytes()); out.close(); }
客户端这样写:
Socket soc = new Socket("127.0.0.1", SERVERPORT);
OutputStream out = s.getOutputStream();
String msg = "hello server";
out.write(msg.getBytes());
out.close();
InputStream in = s.getInputStream(); byte[] bytes = new Byte[1024];
int i=0, t=0;
while((t=in.read()) != -1) {
bytes[i] = (byte)t;
i++;
}
String str = new String(bytes);
System.out.println(str);
求教大神!!!满意追加 展开
服务端这样写:
ServerSocket server = new ServerSocket(SERVERPORT); while(flag) { Socket s = server.accept();
InputStream in = s.getInputStream(); byte[] bytes = new Byte[1024];
int i=0, t=0;
while((t=in.read()) != -1) {
bytes[i] = (byte)t;
i++;
}
String str = new String(bytes);
System.out.println(str); OutputStream out = s.getOutputStream();
String msg = "hello client";
out.write(msg.getBytes()); out.close(); }
客户端这样写:
Socket soc = new Socket("127.0.0.1", SERVERPORT);
OutputStream out = s.getOutputStream();
String msg = "hello server";
out.write(msg.getBytes());
out.close();
InputStream in = s.getInputStream(); byte[] bytes = new Byte[1024];
int i=0, t=0;
while((t=in.read()) != -1) {
bytes[i] = (byte)t;
i++;
}
String str = new String(bytes);
System.out.println(str);
求教大神!!!满意追加 展开
展开全部
static int SERVERPORT=12345;
public static void main(String[] args) throws Exception {
boolean flag = true;
ServerSocket server = new ServerSocket(SERVERPORT);
while(flag) {
Socket s = server.accept();
DataInputStream in = new DataInputStream(s.getInputStream());
String str = in.readUTF();
System.out.println(str);
DataOutputStream out = new DataOutputStream(s.getOutputStream());
String msg = "hello client";
out.writeUTF(msg);
out.flush();
s.close();
}
}
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", SERVERPORT);
DataOutputStream out = new DataOutputStream(s.getOutputStream());
String msg = "hello server";
out.writeUTF(msg);
out.flush();
DataInputStream in = new DataInputStream(s.getInputStream());
String str = in.readUTF();
System.out.println(str);
s.close();
}
注意:流不能关闭,调用流的close方法会导致socket关闭
追问
谢谢你!能不能改成基础流InputStream和OutputStream,因为我们要处理byte数组,我之前改的用基础流的没有关闭流也是用flush()但还是不行
追答
程序还是你自己写,就当是练手吧。
不要用read()==-1来判断是否结束,而改用先写要写出的byte[]的长度,接收时先读长度,然后再用read(byte[] b, int off, int len)读,直到读满长度为止
展开全部
while((t=in.read()) != -1) { <--改为 t=in.read(bytes) bytes[i] = (byte)t;
i++; }t的结果你独到的字节的个数 ,不是具体的值,具体的值已经保存到字节数组里面去了
应该这样
str += new String(bytes); 这样可以独到每一个具体的值
另外,你把out.close() 改成 out.flush() 你再测试下结果
i++; }t的结果你独到的字节的个数 ,不是具体的值,具体的值已经保存到字节数组里面去了
应该这样
str += new String(bytes); 这样可以独到每一个具体的值
另外,你把out.close() 改成 out.flush() 你再测试下结果
更多追问追答
追问
服务器和客户端的读操作都这么写么?改的那句应该放哪?如果方便请把循环整个具体写下,谢谢!
追答
字数超出最大允许值,请删减!
要的化,就发个邮箱
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你 服务器端写完之后就关闭了,所以会包socket is closed.
更多追问追答
追问
是服务器在接收到客户端Socket的时候开启一个线程专门和该客户端通信吗?
像这样:
Socket s = server.accept();
new Thread(new ClientThread(s)).start();
具体通信写在ClientThread里的run() 方法里的While(true)里么?
追答
不需要,你服务器端out.write(msg.getBytes()); out.close(); }
可以看出你服务器写完立马就关闭了。你把out.close()去掉试试
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while((t=in.read()) != -1) { bytes[i] = (byte)t; i++; } String str = new String(bytes); System.out.println(str);
改为
while((i=in.read(bytes))!=-1){
System.out.print(new String(bytes,0,1))
}
改为
while((i=in.read(bytes))!=-1){
System.out.print(new String(bytes,0,1))
}
追问
客户端和服务器的读操作都这么写么?这句--System.out.print(new String(bytes,0,1))--什么意思?循环变量 i 和每次循环取得的 t 都没有意义了,麻烦详解下整个循环到底怎么写?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询