系统包括一些客户端和服务器。客户端向服务器发送消息有3种类型的消息:
<IP addr server>
:<port addr server>
<IP address client>
:<port addr client>
,将在客户端和服务器之间建立链接TCP连接聊天。设置TCP连接后,客户端发送连接设置信息,包括一些字段:
服务器收到此消息。然后创建与客户端2的连接。
当接收从客户端1发送的数据时,聊天服务器传输文本消息 从客户端1到客户端2(客户端2也使用数据交换消息)。
所以我的问题是:如何使用某个字段发送消息?我已经知道send send()发送字符串了。在这里我必须发送消息连接设置或数据交换与某些字段然后我是否在客户端使用包然后在服务器端解压缩?请给我一些解决这个问题的方法吗?
我认为使用:
typedef struct _ConnectionSetup_Message
{
int message_ID; // 0 ConnectionSetup message
unsigned int Port;
unsigned shor IP;
} HELLO_Message;
typedef struct _DataExchange_Message
{
int message_Length;
int message_ID; // 1 for DataExchange message
char *text;
} DataExchange_Message;
答案 0 :(得分:1)
你应该自己尝试,它非常有教育意义。但是有一些简短的建议:
编辑对于c语言示例,您可以查看例如https://stackoverflow.com/questions/5759043/sending-message-over-tcp-ip-using-sockets
答案 1 :(得分:1)
为您的结构使用序列化。并且要注意永远不要发送指针,而是完全序列化数据(字符串)。 有关详细信息,请参阅https://stackoverflow.com/a/1654822/2294017和Serialize and send a data structure using Boost?。 如果您需要深入了解,http://www.ocoudert.com/blog/2011/07/09/a-practical-guide-to-c-serialization/也很方便。
答案 2 :(得分:-1)
也许您可以尝试发送消息类型的标识符,然后使用lenof sizeof(your_struct)发送结构,并以相同的方式在另一侧读取它。
例如:
服务器端:
write(socket, &flag, sizeof(flag));
write(socket, &your_struct, sizeof(DataExchange_Message));
然后在客户端:
read(socket, &flag, sizeof(flag));
//and according to the flag you can do what you want because you know what you are going to receive
read(socket, &your_struct, sizeof(your_struct));