在java中,可以创建套接字服务器和套接字客户端,是否可以运行套接字服务器的实例,以及从同一台机器上的套接字服务器接收数据的套接字/服务器客户端? / p>
例如,套接字服务器在端口60010上运行 并且套接字客户端在通过套接字连接到该端口的同一台机器上运行,或者我需要通过新机器将其添加到我的网络中?如果它在TCP / IP层上运行唯一的IP地址和端口号。
答案 0 :(得分:21)
这是一个简单的可运行示例,可帮助您入门。它启动两个线程,一个带有ServerSocket
,另一个带有Socket
连接。一个连续发送字符串,另一个打印它们。
您应该能够按原样运行此类。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketTest {
public static void main(String[] args) throws IOException {
startServer();
startSender();
}
public static void startSender() {
(new Thread() {
@Override
public void run() {
try {
Socket s = new Socket("localhost", 60010);
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream()));
while (true) {
out.write("Hello World!");
out.newLine();
out.flush();
Thread.sleep(200);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public static void startServer() {
(new Thread() {
@Override
public void run() {
ServerSocket ss;
try {
ss = new ServerSocket(60010);
Socket s = ss.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
答案 1 :(得分:3)
是的,您可以在同一台计算机上拥有以下内容:
ServerSocket server = new ServerSocket(60010);
Socket client = server.accept();
其他地方:
Socket socket = new Socket("localhost", 60010);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello server");
答案 2 :(得分:1)
是的,您可以在同一台计算机上运行客户端和服务器。我一直都在为发展做这件事。如果您遇到麻烦,一些路由器在将数据包转发回自身时遇到问题。尝试使用localhost而不是外部IP进行开发。
答案 3 :(得分:0)
是的,完全有可能。每个操作系统都有一个loopback接口。您可以将多个客户端连接到计算机上的一个服务器。这种通信通过环回接口进行。