[英]Java Socket programming in cmd
因此,我有以下代碼在Linux的telnet登錄上運行。 如何使它在cmd中運行? 我嘗試在cmd中運行tcp客戶端和服務器程序,但沒有得到輸出。 這是我的代碼,它在linux telnet上運行,但不在Windows cmd上運行。
import java.io.*;
import java.net.*;
class tcpclient{
public static void main(String args[])throws Exception{
String hwaddr,modsentence;
BufferedReader inFromUser=new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket=new Socket("localhost",2057);
DataOutputStream outToServer= new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.print("Enter Ip address");
hwaddr=inFromUser.readLine();
outToServer.writeBytes(hwaddr+""+"\n");
modsentence=inFromServer.readLine();
System.out.println("FROM SERVER:"+modsentence);
clientSocket.close();
}
}
import java.net.*;
import java.io.*;
class tcpserver{
public static void main(String args[])throws Exception
{
String clientSentence;
ServerSocket welcomeSocket = new ServerSocket(2057);
while(true)
{
Socket connectionSocket=welcomeSocket.accept();
BufferedReader inFromClient=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient=new DataOutputStream(connectionSocket.getOutputStream());
clientSentence=inFromClient.readLine();
if(clientSentence.equals("a"))
outToClient.writeBytes("testtt");
}
}
}
要回答這個問題:使用bash還是CMD都無關緊要。 套接字編程是相同的,因為外殼不會干擾。 您向服務器發送一些字符,服務器又向后發送一些字符。 我已經在CMD中對此進行了測試,並且工作原理相同。
更改
outToClient.writeBytes("testtt");
至
outToClient.writeBytes("testtt\n");
根據https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
readLine()讀取一行文本。 一行被認為由換行符('\\ n') ,回車符('\\ r')或回車符后緊跟換行符之一終止。
這將使
modsentence = inFromServer.readLine();
返回一個String並將其分配給modsentence。
還請記住,您的tcpserver僅響應字符“ a”。
如果使用BufferedReader,則還應該使用BufferedWriter 。 還要注意,不建議使用DataInputStream.readLine()
,不應使用它。 話雖這么說,是的,Windows中的命令提示符和Linux中的Shell之間是有區別的。 Windows使用\\ r \\ n作為行終止符,而Linux使用\\ n 。 如果您將\\ r \\ n用作換行符,則在所有平台上都應能正常工作。 但是,您永遠不會在實際的客戶端/服務器體系結構中實際使用命令提示符,因此最好不要將應用程序基於Windows的古老功能。 使用\\ n 。
嘗試使用Scanner從System.in獲取輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.