我正在使用java.nio package
我的聊天应用程序。但是,它只能连接本地主机中的不同客户端。如何连接来自不同 IP 地址的多个客户端?
目前我正在使用以下代码连接到我的客户端:
InetAddress.getByName("10.10.10.172");
我希望能够从 IP 地址为 10.10.10.123 的客户端向 IP 地址为 10.10.10.124 的服务器发送消息。
谢谢!
我认为它与您使用单台电脑的方式相同......
在我开始之前还有一件事.. 10.10.10.777 和 10.10.10.888 是无效 IP
IPv4 采用点分十进制格式,范围为 0-255
0 - 网络地址 255 - 广播地址
0 和 255 不用于将 ip 分配给 pc ...使用 1 - 254。
并尝试使用 1024 以上的端口,这些端口被称为 Well-Known 端口,用于运行各种服务,如 SMTP、FTP、HTTP、TELNET 等......
觉得要记住了......
关闭您的防火墙,或者在防火墙中为您要运行服务器的端口的规则添加一个例外。
在服务器端创建单独的线程来处理多个客户端..
例如:
The Server side code example:
public class ServerTest {
ServerSocket s;
public void go() {
try {
s = new ServerSocket(44457);
while (true) {
Socket incoming = s.accept();
Thread t = new Thread(new MyCon(incoming));
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
class MyCon implements Runnable {
Socket incoming;
public MyCon(Socket incoming) {
this.incoming = incoming;
}
@Override
public void run() {
try {
PrintWriter pw = new PrintWriter(incoming.getOutputStream(),
true);
InputStreamReader isr = new InputStreamReader(
incoming.getInputStream());
BufferedReader br = new BufferedReader(isr);
String inp = null;
boolean isDone = true;
System.out.println("TYPE : BYE");
System.out.println();
while (isDone && ((inp = br.readLine()) != null)) {
System.out.println(inp);
if (inp.trim().equals("BYE")) {
System.out
.println("THANKS FOR CONNECTING...Bye for now");
isDone = false;
s.close();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
try {
s.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new ServerTest().go();
}
}