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

我想实现服务器和客户端都可以收发信息,不知道哪里错了

package com.jwy.bb;

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

public class SocketClient {

	public static void main(String[] args) {
		SocketClient client=new SocketClient();
		client.start();
	}
	public void start(){
		Socket socket=null;
		BufferedWriter writer=null;
		BufferedReader reader=null;
		BufferedReader inputReader=null;
		
		try {
			socket=new Socket("127.0.0.1",9898);
			writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			inputReader=new BufferedReader(new InputStreamReader(System.in));
			String inputContent;
			String receiveMsg;
			while((inputContent=inputReader.readLine())!=null){
				writer.write(inputContent+"\n");
				writer.flush();
			}
			while((receiveMsg=reader.readLine())!=null){
				System.out.println(receiveMsg);
			}
		}  catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally{
			try {
				inputReader.close();
				reader.close();
				writer.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}



package com.jwy.aa;


import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;


import com.sun.imageio.spi.OutputStreamImageOutputStreamSpi;


public class SocketServer2 {

public static void main(String[] args) {

SocketServer2 socketserver2=new SocketServer2();

socketserver2.start();

}

public void start(){

ServerSocket socketserver=null;

Socket socket=null;

BufferedReader reader=null;

BufferedWriter writer=null;

BufferedReader inputContent=null;

try {

socketserver=new ServerSocket(9898);

System.out.println("server...");

socket=socketserver.accept();

System.out.println("server"+socket.hashCode()+"connection");

inputContent=new BufferedReader(new InputStreamReader(System.in));

reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));

// writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

String receiveMsg;

String inputcontent;

while((inputcontent=inputContent.readLine())!=null){

writer.write(inputcontent+"\n");

writer.flush();

}

while((receiveMsg=reader.readLine())!=null)

{

System.out.println(receiveMsg);

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

try {

reader.close();

socket.close();

writer.close();

inputContent.close();

socketserver.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}


正在回答

1 回答

 while((inputContent=inputReader.readLine())!=null){

                writer.write(inputContent+"\n");

                writer.flush();

            }

 while((receiveMsg=reader.readLine())!=null){

                System.out.println(receiveMsg);

}

这两个while循环有问题,他们并不会起到循环的作用,如果读取自己输入数据null,就跳出循环1 , 如果在判断读取对方的数据位null,也就跳出循环2, 这样代码就执行过去了。


而且readLine()是一个阻塞方法,如果循环阻塞了,对方怎么发也接收不到。


所以我自己的解决办法是,启动两个线程,一个负责发送,一个负责接收,互不干扰。如果你还有问题我们可以在讨论。


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

举报

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

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

进入课程

我想实现服务器和客户端都可以收发信息,不知道哪里错了

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