我必须使用TCP套接字编程来创建一个将两个数字相加的应用程序。该操作必须发生在服务器上,该服务器接受两个数字并返回结果。因此,解决方案必须包含两个组件:服务器和客户端。在客户端中,必须允许用户使用Scanner类输入两个数字。值必须放在变量中,然后发送到应用程序的服务器端。值可以一起发送或单独发送。在接受该值之后,服务器应该将这些数字相加,并将结果发送给客户端。结账时必须显示所获得的金额。
客户端
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try (Socket socket = new Socket("www.google.com", 80);
BufferedReader bis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream())) {
bos.write("Get /search?q=java HTTP/1.1\r\n\r\n".getBytes());
Scanner input = new Scanner(System.in);
System.out.println("Insert number x.");
int x = input.nextInt();
System.out.println("Insert number y.");
int y = input.nextInt();
bos.flush();
} catch (IOException exc) {
System.out.println(exc.getMessage());
}
}
}
服务器
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
System.out.println("Listening.");
try (ServerSocket server = new ServerSocket(1080);
Socket s = server.accept();
BufferedReader bis = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream())) {
System.out.println("Connected.");
int x = Integer.parseInt(bis.readLine());
int y = Integer.parseInt(bis.readLine());
int z = x + y;
bos.write(("The amount is:" + z).getBytes());
} catch (IOException exc) {
System.out.println(exc.getMessage());
}
}
}
但是我在控制台中得到这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "GET / HTTP/1.1"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:665)
at java.base/java.lang.Integer.parseInt(Integer.java:781)
at Server.main(Server.java:15)
我做错了什么?我想我得到了服务器部分的权利,但我不知道如何处理客户端。多谢了!
1条答案
按热度按时间wsxa1bj11#
没有意义,我很确定你不是在问谷歌答案。
你的委托人做的第一件事就是写...
但你的服务器做的第一件事就是读取
所以你试图写一个
String
,但读一个int
,因此你的问题的核心。现在,除非您打算编写自己的http服务器,否则不需要发送前导
get ...
我也会使用
BufferedWriter
,而不是BufferedOutputStream
,这只是为了让你的生活更轻松。所以,让我们从更新
Server
开始。现在
Client
这假设服务器和客户端运行在同一台机器上,如果不是,那么您需要将
Socket
地址更改为与运行Server
的计算机的IP地址(或主机名)相同。现在,当我运行它时(确保先启动
Server
),我得到.