为了账号安全,请及时绑定邮箱和手机立即绑定

服务器返回消息后,就自动停了!什么原因,求大神帮助

//服务器端
package com.example.demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSoket {
	public static void main(String[] args) {
		ServerSoket serverSoket = new ServerSoket();
		serverSoket.init();
	}

	private void init() {
		// TODO Auto-generated method stub
		ServerSocket server = null;
		BufferedReader bf = null;
		BufferedWriter bw = null;
		try {
			server = new ServerSocket(9898);
			Socket socket = server.accept();
		
			bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			String line = null;
			if((line = bf.readLine())!=null){
				System.out.println(line);
				bw.write("respond:"+line +"\n");
				bw.flush();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
//客户端
package com.example.demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;

public class ClientScoket {
	public static void main(String[] args) {
		ClientScoket clientScoket = new ClientScoket();
		clientScoket.start();
	}

	private void start() {
		// TODO Auto-generated method stub
		Socket client =null; 
		BufferedReader bf  = null;
		BufferedWriter bw = null;
		BufferedReader bfServer = null;
		bf = new BufferedReader(new InputStreamReader(System.in));
		try {
		client = new Socket(InetAddress.getLocalHost(), 9898);
		bfServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
		
		
		
		bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
		
		String line = null;
		
		String res = null;
			while(!(line=bf.readLine()).equalsIgnoreCase(("bye"))){
//			这里非常重要,一定要加上这个\n
				bw.write(line +"\n");
				bw.flush();
				res = bfServer.readLine();
				System.out.println(res);
			}
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				bf.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}
}

为什么服务器端返回消息之后就关了,然后客户端再发,就报Connection reset by peer: socket write error异常

正在回答

3 回答

谢谢,知道了!

0 回复 有任何疑惑可以回复我~

我也认为视频中的服务器端代码有问题,那个socket.accept应该在一个while循环里才能不断接收来自客户端的消息,这样写也就是只能接受一次啊,不知道郭婶儿是怎么接收两次的,是不是视频做了手脚o(^▽^)o

1 回复 有任何疑惑可以回复我~
#1

王洪贺

抱歉说错了,socket.accept在while循环里那个是多个客户端的情况,你得问题主要是 if((line = bf.readLine())!=null){ System.out.println(line); bw.write("respond:"+line +"\n"); bw.flush(); } 这里的错误,buffer要放在while循环里不断接收消息而不是if
2016-06-01 回复 有任何疑惑可以回复我~

服务器端读取客户端的代码写错了

0 回复 有任何疑惑可以回复我~
#1

younghu 提问者

哪里写错了呢!欢迎指正!
2016-05-17 回复 有任何疑惑可以回复我~
#2

慕码人2521115 回复 younghu 提问者

ServerSocket server = null; BufferedReader bf = null; BufferedWriter bw = null; 这几个都没有关闭
2016-05-17 回复 有任何疑惑可以回复我~
#3

younghu 提问者 回复 慕码人2521115

和关闭没有关系的!不过谢谢你了!
2016-05-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
见证Android消息推送时刻
  • 参与学习       48192    人
  • 解答问题       203    个

本课程将一步步教你如何搭建出一个自己的Android推送平台

进入课程

服务器返回消息后,就自动停了!什么原因,求大神帮助

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信