读取和写入int套接字编程数组,java
问题描述:
我的客户机类应该从用户接收10个整数输入并将其发送到服务器。服务器应该接受这10个数字并对它们进行排序。然后它应该将数组发送回客户端,客户端应该打印它们。我的客户端代码:读取和写入int套接字编程数组,java
public class TCPClient {
public static void main(String[] args) throws UnknownHostException, IOException {
int arr[]=new int[10];
int arrFromServer[]=new int[10];
BufferedReader inFromUser= new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost",6786);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
for(int i=0;i<10;i++)
arr[i]=Integer.parseInt(inFromUser.readLine());
for(int i=0;i<10;i++)
outToServer.writeInt(arr[i]);
for(int i=0;i<10;i++)
arrFromServer[i]=Integer.parseInt(inFromServer.readLine());
for (int i = 0; i < arrFromServer.length; i++) {
System.out.println("From Server::"+arrFromServer[i]);
}
clientSocket.close();
}
}
我的服务器代码:
public class TCPServer {
public static void main(String[] args) throws IOException {
int arrFromClient[]=new int[10];
ServerSocket welcomeSocket = new ServerSocket(6786);
while(true){
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
for(int i=0;i<10;i++)
{
arrFromClient[i]=Integer.parseInt(inFromClient.readLine());
}
Arrays.sort(arrFromClient);
for (int i = 0; i < arrFromClient.length; i++) {
outToClient.writeInt(arrFromClient[i]);
}
}
}
}
当我尝试,直到我手动终止程序运行在客户端不断接受数字代码。理想情况下,在10个输入后,它应该去服务器和服务器应该给排序的数组。
上述代码有什么问题。任何帮助将不胜感激。提前致谢。
答
你根本无法与writeInt()
混合Integer.parseInt(inFromClient.readLine())
,你需要使用一个DataOutputStream
写你的整数和DataInputStream
阅读它们,以确保您的整数将是正确的序列化,并使用相同的协议/算法反序列化。
服务器:
int arrFromClient[]=new int[10];
ServerSocket welcomeSocket = new ServerSocket(6786);
while(true){
Socket connectionSocket = welcomeSocket.accept();
DataInputStream inFromClient = new DataInputStream(connectionSocket.getInputStream());
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
for(int i=0;i<10;i++) {
arrFromClient[i] = inFromClient.readInt();
}
Arrays.sort(arrFromClient);
for (int i = 0; i < arrFromClient.length; i++) {
outToClient.writeInt(arrFromClient[i]);
}
}
客户:
int arr[]=new int[10];
int arrFromServer[]=new int[10];
Scanner inFromUser= new Scanner(System.in);
try (Socket clientSocket = new Socket("localhost",6786)) {
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
DataInputStream inFromServer = new DataInputStream(clientSocket.getInputStream());
for(int i=0;i<10;i++)
arr[i]=inFromUser.nextInt();
for(int i=0;i<10;i++)
outToServer.writeInt(arr[i]);
for(int i=0;i<10;i++)
arrFromServer[i]=inFromServer.readInt();
for (int i = 0; i < arrFromServer.length; i++) {
System.out.println("From Server::"+arrFromServer[i]);
}
}
或者您可以使用ObjectOutputStream
和ObjectInputStream
编写和使用方法,读你的数组作为对象writeObject
和下一个:readObject
服务器:
ServerSocket welcomeSocket = new ServerSocket(6786);
while(true){
Socket connectionSocket = welcomeSocket.accept();
ObjectInputStream inFromClient = new ObjectInputStream(connectionSocket.getInputStream());
ObjectOutputStream outToClient = new ObjectOutputStream(connectionSocket.getOutputStream());
int[] arrFromClient = (int[]) inFromClient.readObject();
Arrays.sort(arrFromClient);
outToClient.writeObject(arrFromClient);
}
客户:
int arr[]=new int[10];
Scanner inFromUser= new Scanner(System.in);
try (Socket clientSocket = new Socket("localhost",6786)) {
ObjectOutputStream outToServer = new ObjectOutputStream(clientSocket.getOutputStream());
ObjectInputStream inFromServer = new ObjectInputStream(clientSocket.getInputStream());
for(int i=0;i<10;i++)
arr[i]=inFromUser.nextInt();
outToServer.writeObject(arr);
int[] arrFromServer = (int[])inFromServer.readObject();
for (int i = 0; i < arrFromServer.length; i++) {
System.out.println("From Server::"+arrFromServer[i]);
}
}
提示:write'Int'与read'Line'。 – Kayaman
我知道了:(我应该使用哪一个?我使用readLine读取用户输入并将writeInt写入服务器。这是错误的吗? – Pepper
'writeInt'不写一行,两种方法都是解释的在javadocs中,我推荐阅读它们 – Kayaman