【发布时间】:2020-08-31 19:39:45
【问题描述】:
我使用的是 Windows 10。
我在 Java 上有这个服务器程序:
import java.io.*;
import java.net.*;
public class TCPServer {
public static final int TCP_SERVER_PORT = 6789; //mer eller mindre tilfeldig valg portnr.
public static void main(String args[]) throws Exception
{
String setningFraKlient;
String oversattSetning;
//Lytter på port TCP_SERVER_PORT:
System.out.println("Lytter paa TCP-port " + String.valueOf(TCP_SERVER_PORT) + " ...");
ServerSocket welcomeSocket = new ServerSocket(TCP_SERVER_PORT);
while(true) {
//Tjeneren venter, 'henger' på accept(), på at klienten skal ta kontakt:
Socket connectionSocket = welcomeSocket.accept();
//Fortsetter, skriver ut IP-adressen til klienten:
System.out.println("Kontakt med: " + connectionSocket.getRemoteSocketAddress().toString());
//Kopler connectionsocket til InputStream:
InputStreamReader isr = new InputStreamReader(connectionSocket.getInputStream());
BufferedReader fraKlient = new BufferedReader(isr);
//Kopler OutputStream til connectionsocket:
DataOutputStream tilKlient = new DataOutputStream(connectionSocket.getOutputStream());
//Leser data fra klienten:
setningFraKlient = fraKlient.readLine();
System.out.println("Tekst fra klient: " + setningFraKlient);
//Oversetter til store bokstaver:
oversattSetning = setningFraKlient.toUpperCase() + '\n';
System.out.println("Gjør om til store bokstaver, returnerer:" + oversattSetning);
//Sender store bokstaver i retur:
tilKlient.writeBytes(oversattSetning);
}
}
}
还有这个 Java 客户端程序:
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String args[]) throws Exception
{
String sentence="";
String modifiedSentence="";
//Oppretter forbindelse mot localhost på port 6789:
Socket clientSocket = new Socket("localhost", TCPServer.TCP_SERVER_PORT);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//Spør bruker etter tekst:
System.out.print("Skriv inn tekst: ");
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
//Skriv ut tekst som store bokstaver:
System.out.println("\nTekst som store bokstaver: ");
System.out.println(modifiedSentence);
//Lukk socket og avslutt:
clientSocket.close();
}
}
正如您在服务器代码上看到的,我使用“localhost”来测试程序,并且使用端口号 6789。
当我运行程序时,它按预期工作:
- 我首先运行服务器程序。
- 然后我运行客户端程序。
- 我将一些消息写成字符串。
- 我得到了所有字母都转换为大写的字符串。
我启动 WireShark 并执行以下操作:
- 我点击“Go -> Options”,然后选择我用来连接互联网的“Wi-fi”。 “链路层标头”是“以太网”。
- 然后我在 Wireshark 上看到不同的数据包或即将到来(UDP、TCP、TLS 等)
- 我在 Ecplipse 上启动 Java 程序,输入字符串,发送并接收大写版本 如上所述。
- 然后我停止 Wireshark。
Wireshark 中的过滤器行是空白的,那里没有过滤器。 我可以看到很多数据包进入 Wireshark。 但是我找不到任何使用端口号 6789 的数据包,尽管我的应用程序正在使用它。 而且我找不到任何名称为 Java 的数据包。
简而言之,我找不到在我的 Java 应用程序上发送的数据包。为什么会这样?如何找到数据包?
另一件事是,尽管我删除了所有浏览器缓存,但并非我访问的所有网站都在 WireShark 上可见。我访问了一个网站,但这在 WireShark 上是不可见的。我单击了该站点中指向 Wikipedia 的链接,但这也是不可见的。
然后我访问 stackoverflow.com,它在 WireShark 上可见,我得到响应“301 永久移动”。
【问题讨论】:
标签: sockets wireshark tcpclient