java 局域网socket连接不到服务器

Callen 发布于 2014/01/04 15:21
阅读 2K+
收藏 2

    我的服务器是centos,两个java文件MyServer和MyClient。在本机上可以相互连接,但是把MyServer运行在centos之后socket就通信不了了。

MyServer.java

public class MyServer {

	public static void main(String[] args) throws IOException{
		ServerSocket server=new ServerSocket(2000);
		while(true){
			Socket socket=server.accept();
			System.out.println("yes");
			new MySocketThread(socket).start();
		}
		
		
	}
	
}
class MySocketThread extends Thread{
	private Socket socket;
	public MySocketThread(){}
	public MySocketThread(Socket socket) {
		this.socket=socket;
	}
	
	@Override
	public void run() {
		try {
			handle(socket);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void handle(Socket socket) throws IOException{
		
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		
		while(true){
			String msg=in.readLine();
			System.out.println(msg);
			
			out.println(msg);
			out.flush();
			
			if(msg.equals("bye")){
				break;
			}
		}
	}
}
MyClient.java

public class MyClient {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		
		System.out.println("start");
		Socket socket=new Socket("192.168.10.3",2000);
		System.out.println("start");
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("start");
		System.out.println(socket.getInetAddress());
		while(true){
			String msg=read.readLine();
			out.println(msg);
			out.flush();
			if(msg.equals("bye")){
				break;
			}
			System.out.println(in.readLine());
		}
	}

}
192.168.10.3为服务器的ip,在本机中把它换成localhost测试没有问题。

运行结果就是客户端和服务器链接不上。

以下是问题补充:

@Callen:我一经关了防火墙: chkconfig iptables off (2014/01/04 15:38)
加载中
0
Monkey
Monkey

iptables -F

iptables -X

iptables -Z

 /etc/init.d/iptables save

全部清空防火墙。

也可以选择只添加2000端口放行的规则。

iptables -A INPUT -p tcp --dport 2000 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 2000 -j ACCEPT

要针对进和出两条规则才行。更详细设置请看鸟哥私房菜。

chkconfig 命令只是设置开机是否启动防火墙。关闭防火墙service iptables stop,如果你使用了二层防火墙ebtables也要放开2000端口。(默认设置基本上没有这个玩意)

Callen
Callen
万分感谢!!
0
NealFeng
NealFeng
MyServer.java的main函数里,那些代码为什么要放到while循环里?
Callen
Callen
这样可以对多个客户端进行相应呀,只要对2000端口进行访问就生成Socket对象进行处理。
0
jeffsoft
jeffsoft
路由、网关、防火墙。还有超级无敌的杀软。
Callen
Callen
嗯,不过我这里只有防火墙的问题。
0
NealFeng
NealFeng

07        Socket socket=new Socket("192.168.10.3",2000);

通讯不了,那运行的时候这句没抛出异常吗?

再一个就是windows和linux的默认编码不一样,你没有明确指定输入和输入流的编码。 

Callen
Callen
程序卡在这一句,连接超时。
0
hejindan88V
hejindan88V
防火墙不是这么关的
0
hejindan88V
hejindan88V
service iptables stop
hejindan88V
hejindan88V
回复 @CodePlus : 开放你想要访问的端口就可以了
Callen
Callen
谢谢,我这样成功的关掉防火墙了。请问除了停掉防火墙之外还有别的方法么。
0
新一jun
新一jun
防火墙。。。
0
quyf
quyf
最后是否是防火墙的问题呢?
返回顶部
顶部