我想在java服务器上创建一个客户端/服务器应用程序,IP地址为192.168.1.100,等待端口4500上的客户端请求。
客户端从键盘读取字符串,向服务器发送连接请求。建立连接后,它会将字符串发送到服务器。
这是我尝试过的代码:
对于Serveur:
import java.net.*;
import java.io.*;
public class Serveur {
public Serveur() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
ServerSocket ecoute;
ecoute = new ServerSocket(1111);
Socket service = null;
System.out.println("Serveur en attente d'un client !");
while(true)
{
service = ecoute.accept();
System.out.println("Client connécté !");
DataInputStream is = new DataInputStream(service.getInputStream());
System.out.println("Client dit : " + is.readUTF().toUpperCase());
service.close();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
对于客户:
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class Client {
public Client() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Connexion en cours ...");
try {
Socket s = new Socket("localhost", 1111);
DataOutputStream os = new DataOutputStream(s.getOutputStream());
Scanner sn = new Scanner(System.in);
os.writeUTF(sn.nextLine());
} catch ( IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Connécté au serveur !");
}
}
但我对此代码有疑问:
java.net.ConnectException:连接超时:connect at java.net.DualStackPlainSocketImpl.connect0(Native Method)at java.net.DualStackPlainSocketImpl.socketConnect(未知来源)at java.net.AbstractPlainSocketImpl.doConnect(未知来源)at java.net.AbstractPlainSocketImpl.connectToAddress(未知来源)at java.net.AbstractPlainSocketImpl.connect(未知来源)at java.net.PlainSocketImpl.connect(未知来源)at java.net.SocksSocketImpl.connect(未知来源)at java.net.Socket.connect(未知来源)at java.net.Socket.connect(未知来源)at java.net.Socket。(未知来源)at Client.main上的java.net.Socket。(未知来源)(Client.java:18)
答案 0 :(得分:1)
您的代码在我的计算机上正常运行。
这里的问题似乎不在于您的代码,而在于您的网络设置。
你应该:
答案 1 :(得分:0)
如果没有关于您的环境的更多信息,很难给出明确的答案。
但是,最常见的原因是您没有正确转发路由器上的端口。这样做会有所不同,具体取决于路由器的制造商,但是,一般来说,您需要将端口1111
转发到本地IP地址192.168.1.100
(或者您机器的本地IP是什么)重新运行Serveur
。
(旁注:我不知道为什么你说服务器正在侦听端口4500上的请求,当你的代码说明所有内容都设置为1111时。)