簡體   English   中英

cmd中的Java套接字編程

[英]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

嘗試使用ScannerSystem.in獲取輸入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM