我正在使用套接字连接我的Android应用html" target="_blank">程序(客户端)和Java后端服务器。每次与服务器通信时,我都希望从客户端发送两个数据变量。
1)某种消息(由用户通过界面定义)
2)消息的语言(由用户通过界面定义)
我该如何发送这些消息,以便服务器将每个消息解释为一个单独的实体?
在读取了服务器端的数据并做出了适当的结论之后,我想向客户端返回一条消息。(我想我会没事的)
因此,我的两个问题是如何确定发送的两个字符串(客户端到服务器)在客户端是唯一的,以及如何在服务器端分离这两个字符串。(我在想一个字符串数组,但是无法确定这是否可行或合适。)
我本来要发布一些代码,但不确定如何帮助。
我假设您正在使用TCP套接字进行客户端-
服务器交互?将不同类型的数据发送到服务器并能够区分两者的一种方法是将第一个字节(如果消息类型超过256种,则使用更多字节)作为某种标识符。如果第一个字节为1,则为消息A,如果为2,则为消息B。通过套接字发送此消息的一种简单方法是使用DataOutputStream/DataInputStream
:
客户:
Socket socket = ...; // Create and connect the socket
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
// Send first message
dOut.writeByte(1);
dOut.writeUTF("This is the first type of message.");
dOut.flush(); // Send off the data
// Send the second message
dOut.writeByte(2);
dOut.writeUTF("This is the second type of message.");
dOut.flush(); // Send off the data
// Send the third message
dOut.writeByte(3);
dOut.writeUTF("This is the third type of message (Part 1).");
dOut.writeUTF("This is the third type of message (Part 2).");
dOut.flush(); // Send off the data
// Send the exit message
dOut.writeByte(-1);
dOut.flush();
dOut.close();
服务器:
Socket socket = ... // Set up receive socket
DataInputStream dIn = new DataInputStream(socket.getInputStream());
boolean done = false;
while(!done) {
byte messageType = dIn.readByte();
switch(messageType)
{
case 1: // Type A
System.out.println("Message A: " + dIn.readUTF());
break;
case 2: // Type B
System.out.println("Message B: " + dIn.readUTF());
break;
case 3: // Type C
System.out.println("Message C [1]: " + dIn.readUTF());
System.out.println("Message C [2]: " + dIn.readUTF());
break;
default:
done = true;
}
}
dIn.close();
显然,您可以发送各种数据,而不仅仅是字节和字符串(UTF)。
请注意,它将writeUTF
写一种修改的UTF-8格式,其后是一个无符号的两字节编码整数的长度指示符,该整数指示您2^16 - 1 = 65535
要发送的字节。这样就可以readUTF
找到编码字符串的结尾。如果决定自己的记录结构,则应确保记录的结尾和类型是已知的或可检测的。
如何将数据从PHP页面发送到TCP端口? 我正在使用它,但我不能使用任何数据!还有,你知道我怎么才能暂停吗? 有什么问题?
因此,我正在用Java编写一个程序,在DatagramSocket和DataGramPacket的帮助下发送和接收数据。问题是,当我发送数据/接收数据时,数据在我发送的程序中也会有所不同,但只是在某些情况下,比如: 但有时会起作用,比如:
我想使用Qt UDP(不是TCP)套接字传输文件。所以我这样写代码: 看来要传输的Qt UDP数据包的最小大小是8192字节。接收方总是得到第一个数据包,但不能接收其他数据包。 我对Qt和网络编程的经验很少,所以我不知道我的猜想对不对。你能告诉我如何改变这些代码来支持在第一个数据包之后接收数据包,这样我就可以传输大数据了吗?
我计划做一个项目,其中包括一个作为visual studio控制台应用程序的服务器和一个作为qt应用程序的客户端应用程序,我想知道是否有可能在这两个应用程序之间发送和接收数据,如果是的话,我还想知道它是否也能在android上工作,在windows作为windows服务器端和android作为客户端之间工作 注意:服务器将使用winsock,客户端将使用qt套接字,两个应用程序将使用tcp套接字
我在网上搜索了很多,但是没有找到通过套接字发送对象并按原样接收的解决方案。我知道它需要酸洗,我已经做过了。将其转换为字节,然后从另一方面接收。但如何将这些字节转换为该类型的对象。 这是在客户端将对象转换为StringIO并发送到服务器的代码。在服务器端,我得到字节。现在我正在搜索要再次转换为StringIO的字节,以便获得对象值。 在代码中,对象被包装在StringIO中,并通过套接字发送。任何更
我试着做一个简单的服务器-客户机套接字通信,但服务器似乎无法正常工作。无论何时发送或接收,我都会收到此错误: 非插座上的插座操作:非插座上的插座操作 奇怪的是,这只会在服务器发送时出现。客户似乎还可以: