【问题标题】:Java Socket Programming: How to send <STX>string-data<ETX> over TCP connection to the server? [duplicate]Java Socket 编程:如何通过 TCP 连接向服务器发送 <STX>string-data<ETX>? [复制]
【发布时间】:2016-06-30 14:57:14
【问题描述】:

我必须建立到服务器的 TCP 连接,这要求我以以下格式发送登录凭据:

username=fred&password=123456

假设主机:qstage.thetcphost.com 和端口:8999

我是套接字编程的新手,并使用它来实现它。我在客户端使用了 java.net.Socket,但我不知道如何将上述字符串发送到 Java 中的 TCP 服务器进行身份验证。

我能够连接到服务器,但是如何在之后(或期间)以 ... 格式传递凭据字符串: Socket socket = new Socket("mshxml.morningstar.com", 8999);

我的意思是我必须编写什么代码(在上面的行之后)来发送这些数据(用户名和密码包含在 STX 和 ETX 中)以便向 TCP 服务器验证我自己的身份?

我已在此网站上搜索过此信息,但找不到任何信息。非常感谢您的帮助。

代码如下:

Socket socket = new Socket("msd4xml.abcd.com", 8999, InetAddress.getLocalHost(), 8999);
    System.out.println(socket.isConnected());
    InputStream inStream = socket.getInputStream();
    OutputStream outStream = socket.getOutputStream();
    DataOutputStream dout = new DataOutputStream(outStream);
    int stx = 0x02;
    int etx = 0x03;

    dout.writeByte(stx);
    dout.writeBytes("username=fred&password=12345");   // this line gives error, infact every 2nd writeByte(s) gives error.
    dout.writeByte(etx);

它正在给予:

Exception in thread "main" java.net.SocketException: Connection reset by peer: 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 com.voya.socketprog.Client.main(Client.java:44)

【问题讨论】:

  • 带有DataOutputStream
  • 是的,我正在使用 DataOutputStream,但如何使用 标签发送数据。是不是这样:int stx = 2, etx = 3; String STX = new Character((char)stx).toString(); String ETX = new Character((char)etx).toString(); dataOutputStream.writeBytes(STX+"username=fred&password=123456"+ETX);
  • 请编辑问题以包含您的代码。

标签: java sockets tcpclient serversocket tcplistener


【解决方案1】:

您可以使用writeByte发送STX、ETX。

static final int STX = 2;
static final int ETX = 3;

dataOutputStream.writeByte(STX);
dataOutputStream.writeBytes("username=fred&password=123456");
dataOutputStream.writeByte(ETX);

【讨论】:

  • 谢谢 :) 我会在验证后立即更新您。顺便说一句,不应该 ETX = 3 而不是 2?
  • 嗯,你试过了吗?
  • 抱歉@weston 回复延迟。我试过了,但没有用。我尝试使用: char stx = '\u0002' 和 String stx = "\u0002" 但它也没有用。还有其他选择吗?
  • 只是说它不起作用并没有给我任何去处。究竟发生了什么?有什么东西寄出去了吗?
  • @Pratap 重置问题已在您的众多副本之一中得到解答。无论如何,您不应该发布重复的内容,尤其是如果您永远不会阅读您得到的答案。
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2015-03-26
  • 2011-05-03
  • 1970-01-01
  • 2021-05-09
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多