我无法使用以下客户端服务器程序在同一网络上连接两台不同的计算机。
但是代码在同一台机器上运行良好。
我认为在客户端程序中,它在socket.accept()
之前进入无限循环;
请提出一个可能的解决方案。
server.java
import java.io.*;
import java.net.*;
import java.lang.*;
class server{
public static void main(String args[]){
try{
int one,zero;
one=zero=0;
ServerSocket sock=new ServerSocket(2000);
Socket soc=sock.accept();
DataInputStream dis=new DataInputStream(soc.getInputStream());
System.out.println("Connection Established");
String msg =dis.readLine();
System.out.println("MESSAGE : "+msg);
for(int i=0;i<msg.length();i++){
if(msg.charAt(i)=='0')
zero++;
else
one++;
}
System.out.println("Ones are "+one);
System.out.println("Zeros are "+zero);
soc.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
client.java
import java.io.*;
import java.net.*;
class client{
public static void main(String args[]){
try{
Socket soc=new Socket("localhost",2000);//or ipv4 address for different computers
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
PrintStream pr=new PrintStream(soc.getOutputStream());
System.out.println("Enter message..");
String msg =is.readLine();
pr.println(msg);
System.out.println("YOU ENTERED.."+msg);
soc.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
答案 0 :(得分:0)
我遇到了同样的问题,这就是我如何解决的问题:UDP广播。它将允许客户端连接到服务器,无论其IP如何,因此您不必硬编码IP地址,只需要用于UDP的端口(见下文)。
以下是它的工作原理:
1.Server watch port n
2.客户端可以到达的所有端口发送消息
3.当邮件到达服务器端口时,服务器响应发件人并包含其IP地址
4.Client创建一个套接字并连接到他从服务器获取的IP地址
以下是帮助我的教程:http://michieldemey.be/blog/network-discovery-using-udp-broadcast/