[英]Socket server no connection
嗨,我是Java套接字的新手,我一直在尝试创建服务器套接字。 有人可以告诉我我要去哪里了,因为我收到一个错误消息:“地址已在使用中”。 有时我没有收到错误,但没有建立连接。 请帮助? 这是服务器类和客户端类。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
public class MessageServer {
public static void main(String[] args) throws IOException{
int port = 8080;
//int port = Integer.parseInt(args[0]);
ServerSocket server = new ServerSocket(port);
while(true){
System.out.println("Waiting for client...");
Socket client = server.accept();
System.out.println("Client from " + client.getInetAddress() + " connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String inputLine = in.readLine();
System.out.println("Client said: '"+inputLine+"'");
Writer count = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
byte c [] = count.toString().getBytes();
count.flush();
}
}
}
import java.net.*;
import java.io.*;
public class MessageSendClient {
public static void man(String args[]) throws IOException{
Socket server1 = new Socket("143.210.72.82", 8080);
System.out.println("Connected to " + server1.getInetAddress());
InputStream in = server1.getInputStream();
byte c[] = new byte[100];
int num = in.read(c);
String count = new String(c);
System.out.println("Server said: " + count);
}
}
不要使用您的ip,但要使用localhost或127.0.0.1,并尝试使用新端口,请尝试使用大于1024的端口(此数字下的大多数是众所周知的端口,它们已注册到IANA)
尝试新的端口。 我不会使用8080,因为它可能已经使用了(可能已经使用过)。 使用完插座后,也要尝试始终关闭插座。
由于我自己将套接字用于大学用途,因此代码如下(如果您需要UDP或RMI,我也可以发布它们)
public class TCPClient {
public static void main(String[] args){
try{
Socket socket = new Socket("127.0.0.1", 6666);
PrintWriter data_to_server = new PrintWriter(socket.getOutputStream(), true);
BufferedReader data_from_server =
new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//Schicke Nachricht an Server
BufferedReader system_reader = new BufferedReader(new InputStreamReader(System.in));
long start_send = System.nanoTime();
String msg = system_reader.readLine();
data_to_server.println(msg);
//Erhalte jeweilige Antwort
msg = data_from_server.readLine();
System.out.println("Data from Server : " + msg);
System.out.println("Timespan: " + (System.nanoTime()-start_send));
socket.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
TCPServer tcp = new TCPServer();
tcp.initialize(6666);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public void initialize(int port) throws IOException {
// Erstellen eines Server Sockets
ServerSocket server = new ServerSocket(port);
while (true) {
// Warten bis die Verbindung besteht
System.out.println("Waiting for client to connect...");
Socket socket = server.accept();
// Writer für die ausgehende Antwort
PrintWriter data_to_client = new PrintWriter(
socket.getOutputStream(), true);
// Reader für die ankommende Nachricht
BufferedReader data_from_client = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
// IP-Adresse des Clients
InetAddress remoteIp = socket.getInetAddress();
// Erhalten der Nachricht
String msg = data_from_client.readLine();
System.out.println("Client " + remoteIp + " : " + msg);
// Versenden der Antwort
send(data_to_client, msg);
}
}
}
如果您使用的是Linux 8080/80/8443,则没有很好的端口,而我们需要另一个端口,例如3456。并且始终始终关闭客户端的套接字。
更新:首先,您不应该使用Server.close()关闭Server套接字,Server应该正在运行。 那就是为什么while循环在那里的原因。 从服务器获取输入流后,应使用socket.close()关闭Client套接字。 还请记住,始终在write()和flush()之后使用Close()关闭输出流,以免产生副作用。 设置两个类,一个用于服务器,一个用于客户端。 首先启动Java类Server,然后运行Client类以连接到Server。 终止您的Client类,然后再次运行。 如果您使用的是eclipse,请同时在控制台中终止客户端。 有时Java进程是重叠的,因此只需使用x按钮终止所有正在运行的进程。 改进示例代码后,可以再次启动Server和Client类。 如果仍然无法使用,则需要重新发布问题,并在“客户端和服务器”的“详细信息”中显示当前代码。 由于某种原因,我已经迷失了方向,您的当前状态是什么,因为您已经批准了问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.