如果使用 Java 接收数据,如何制作一个从服务器接收数据并向服务器发送数据的程序
How to make a program that receives data from the server and sends data to the server if data is received with Java
我有一个从服务器接收数据并打印数据的程序。如何将程序变成接收数据后发回其他数据的程序?我尝试将 datainputstream 和 dataoutputstream 添加到这两个程序,但它没有用,它没有给出错误并且它停止工作,所以我把它删除了。服务器:
package testSocket;
import java.net.*;
import java.io.*;
import javax.swing.JFrame;
public class server {
public static void main(String[] args) throws IOException {
JFrame jframe = new JFrame("TEST SERVER");
jframe.setVisible(true);
jframe.setSize(800, 600);
try (ServerSocket sws = new ServerSocket(13481)) {
Socket socket = sws.accept();
OutputStream outs = socket.getOutputStream();
DataOutputStream douts = new DataOutputStream(outs);
douts.writeUTF("Hello.");
douts.close();
outs.close();
} catch (Exception e) {
System.out.println("Exception : " + e);
}
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
客户:
package testSocket;
import java.io.*;
import java.net.*;
public class client {
public static void main(String[] args) throws IOException {
Socket tcs = new Socket("localhost", 13481);
InputStream iss = tcs.getInputStream();
DataInputStream dis = new DataInputStream(iss);
String str = new String(dis.readUTF());
System.out.println("test " + str);
dis.close();
iss.close();
tcs.close();
}
}
我正在尝试制作一个程序,当我从服务器发送数据时,它会向我发送指定的数据
你能对此提出一些建议吗?
您需要为 Rx、Tx 和连接操作创建单独的线程。原因是套接字阻塞了当前线程并等待数据。所以你把 Rx、Tx、Connection 和消息处理都放到它们自己的线程中(或者更好的是,一个服务)
Thread rxThread = new Thread(()->{
// read from DataInputStream and cache it (usually into a thread-safe collection)
});
Thread txThread = new Thread(()->{
// send messages (usually cached in some thread-safe collection)
});
Thread acceptConnections = new Thread(()->{
Socket clientConnect = serverSocket.accept();
// handle your connections here
});
这很复杂。很多基本 java 知识都集中在一个应用程序中。
研究 java 并发性、全双工套接字通信以及您可以找到的任何回显服务器实现。
java: Single socket on read write operation. Full duplex - 在 github
上有一个 link 的实现
有趣的是,oracle 制作了一个 EchoServer.java 教程...https://docs.oracle.com/javase/tutorial/networking/sockets/examples/EchoServer.java
我开始为您制作模型,但意识到它的复杂性并停止了。
我有一个从服务器接收数据并打印数据的程序。如何将程序变成接收数据后发回其他数据的程序?我尝试将 datainputstream 和 dataoutputstream 添加到这两个程序,但它没有用,它没有给出错误并且它停止工作,所以我把它删除了。服务器:
package testSocket;
import java.net.*;
import java.io.*;
import javax.swing.JFrame;
public class server {
public static void main(String[] args) throws IOException {
JFrame jframe = new JFrame("TEST SERVER");
jframe.setVisible(true);
jframe.setSize(800, 600);
try (ServerSocket sws = new ServerSocket(13481)) {
Socket socket = sws.accept();
OutputStream outs = socket.getOutputStream();
DataOutputStream douts = new DataOutputStream(outs);
douts.writeUTF("Hello.");
douts.close();
outs.close();
} catch (Exception e) {
System.out.println("Exception : " + e);
}
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
客户:
package testSocket;
import java.io.*;
import java.net.*;
public class client {
public static void main(String[] args) throws IOException {
Socket tcs = new Socket("localhost", 13481);
InputStream iss = tcs.getInputStream();
DataInputStream dis = new DataInputStream(iss);
String str = new String(dis.readUTF());
System.out.println("test " + str);
dis.close();
iss.close();
tcs.close();
}
}
我正在尝试制作一个程序,当我从服务器发送数据时,它会向我发送指定的数据 你能对此提出一些建议吗?
您需要为 Rx、Tx 和连接操作创建单独的线程。原因是套接字阻塞了当前线程并等待数据。所以你把 Rx、Tx、Connection 和消息处理都放到它们自己的线程中(或者更好的是,一个服务)
Thread rxThread = new Thread(()->{
// read from DataInputStream and cache it (usually into a thread-safe collection)
});
Thread txThread = new Thread(()->{
// send messages (usually cached in some thread-safe collection)
});
Thread acceptConnections = new Thread(()->{
Socket clientConnect = serverSocket.accept();
// handle your connections here
});
这很复杂。很多基本 java 知识都集中在一个应用程序中。
研究 java 并发性、全双工套接字通信以及您可以找到的任何回显服务器实现。
java: Single socket on read write operation. Full duplex - 在 github
上有一个 link 的实现有趣的是,oracle 制作了一个 EchoServer.java 教程...https://docs.oracle.com/javase/tutorial/networking/sockets/examples/EchoServer.java
我开始为您制作模型,但意识到它的复杂性并停止了。