<分区>
我正在尝试熟悉套接字编程,并想编写一个程序,让客户端能够进入网站/端口,将该信息传递给服务器,让服务器为所有页面文本运行 HTTP Get,打印它(服务器端),然后将该文本传回客户端进行打印(客户端)。
到目前为止,我能够让它读取给定的网页服务器端并尝试将该页面输入到一个字符串中,但由于某种原因,它会将所述字符串的第一行传回给客户端,仅此而已.我也得到这个错误服务器端:
Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeBytes(Unknown Source)
at assign1.TCPServer15.main(TCPServer15.java:48)
我不是 100% 确定出了什么问题,我已经尝试解决各种问题,这是我第一次尝试做这样的事情,所以我希望得到提示!
这是客户端的代码
import java.io.*;
import java.net.*;
class TCPWebClient
{
public static void main(String argv[]) throws Exception
{
String sentence;
String webText;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.print("Enter a single string in the form: server/port. \nExample: (www.google.com/80)\n");
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
webText = inFromServer.readLine();
System.out.println("FROM SERVER:\n" + webText);
clientSocket.close();
}
}
还有我的服务器代码:
import java.io.*;
import java.net.*;
class TCPServer15
{
public static void main(String argv[]) throws Exception
{
String clientSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("Received: " + clientSentence);
String [] connectionInfo = clientSentence.split("/");
Socket webSocket = new Socket(connectionInfo[0], Integer.parseInt(connectionInfo[1]));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(webSocket.getOutputStream())));
out.println("GET /index.html HTTP/1.0");
out.println();
out.flush();
BufferedReader inFromWeb = new BufferedReader(new InputStreamReader(webSocket.getInputStream()));
String inputLine;
StringBuilder stringBuilder = new StringBuilder();
while ((inputLine = inFromWeb.readLine()) != null)
{
System.out.println(inputLine);
stringBuilder.append(inputLine);
stringBuilder.append("\n");
}
String finalString = stringBuilder.toString();
inFromWeb.close();
outToClient.writeBytes(finalString);
}
}
}