请教一个简单的javaTCP通信的问题,感激

it_junior 发布于 2016/11/03 16:38
阅读 216
收藏 0
//Server
import java.net.*;
import java.io.*;
public class TalkServer2{
	public static void main(String[] args){
		BufferedReader cout = null; //接收客户端
		BufferedReader sin = null;
		BufferedWriter sout = null; //写入客户端流
		String sstr = null;
		String temp = null;
		boolean flag = false;
		try{
			ServerSocket server = new ServerSocket(9995);
			Socket client = server.accept();
			System.out.println("连接已建立!");
			while(true){
				cout = new BufferedReader(new InputStreamReader(client.getInputStream()));
				System.out.println("Client: " +cout.readLine());
				
				sout = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
				sin = new BufferedReader(new InputStreamReader(System.in));
				while((temp=sin.readLine())!=null){
					sout.write(temp,0,temp.length());
					sout.newLine();
					sout.flush();
				}
				cout.close();
				sin.close();
				sout.close();
				client.close();
				server.close();
			}
		}  catch(Exception e){
			e.printStackTrace();
	    	}
	}
}



//Client

import java.net.*;
import java.io.*;
public class TalkClient2{
	public static void main(String[] args){
		BufferedReader cin = null;
		BufferedWriter cout = null; //写入服务端流;
		BufferedReader sout = null; //接收服务端流
		String cstr = null;
		String temp = null;
		try{
			    InetAddress ia = InetAddress.getLocalHost();
			    Socket socket = new Socket(ia,9995);
				
		while(true){
				
				cout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
				cin = new BufferedReader(new InputStreamReader((System.in)));
				while((temp=cin.readLine())!=null){
					cout.write(temp,0,temp.length());
					cout.newLine();
					cout.flush();
				}
				
				sout = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			    System.out.println("Server: " +sout.readLine());
				
			cout.close();
			cin.close();
			cout.close();
			sout.close();
			socket.close();
			
		}		
		    } catch(Exception e){
				e.printStackTrace();
			}
	}
}

客户端→ 服务端 的时候可以发送

服务端→ 客户端发送后客户端无显示,先关服务端,再关客户端后有显示(用的写字板和cmd)

这是为什么呢?为什么不能直接服务端到客户端发送,立即在客户端显示呢?


以下是问题补充:

@it_junior:其实我想说,得手动关闭客户端,服务端的通信才会在客户端显示,可能表达的不准确吧,见谅 (2016/11/03 18:10)
加载中
0
肠殇泉
肠殇泉
把关闭去掉
it_junior
it_junior
回复 @肠殇泉 : 恩,的确有这个问题
肠殇泉
肠殇泉
回复 @it_junior : 目前你连接一次,关闭一次,tcp是长连接,不是短连接
it_junior
it_junior
我说的关闭指在cmd上关闭程序,断掉通信 不知道您说的是什么意思
0
hzh62
hzh62
 Socket client = server.accept();

            System.out.println("连接已建立!");

应该放在 while 里面

it_junior
it_junior
应该不是这个问题吧,通信一旦建立,就与accept()无关了吧 accept()只是接受端口,而且按您的方法试了下,还是一样的
0
邹海彬
邹海彬

你的客户端还在while循环中, 没到system.out.println这里来.


-----

加我微信214710841, 可以相互交流哦

it_junior
it_junior
应该是getInputStream()堵塞了
0
当空皓月
当空皓月
将TalkServer2中的client.close();   server.close();  去掉!
it_junior
it_junior
得手动关闭客户端后,才能打印出来,应该是getInputStream()堵塞了
返回顶部
顶部