繁体   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