【发布时间】:2013-05-25 15:24:35
【问题描述】:
系统包括一些客户端和服务器。客户端向服务器发送消息有 3 种类型的消息:
- 连接设置:用户类型命令行:远程聊天
<IP addr server>:<port addr server><IP address client>:<port addr client>,客户端和服务器聊天之间将建立一个链接TCP连接。 TCP连接建立后,客户端发送连接建立信息,包括一些字段:- 消息标识符:是一个 32 位整数。对于连接设置消息,此字段等于 0。
- 客户端 2 的字段 IP 地址(客户端 1 调用),客户端 2 的端口地址。
服务器收到此消息。然后创建到客户端 2 的连接。
- 数据交换:用于客户端和服务器之间的数据交换。包括一些字段:
- 消息标识符:是一个 32 位整数。对于数据交换消息,此字段 = 1
- 数据长度:表示短信长度的整数。
- 数据文本字段:包含要交换的文本消息。
聊天服务器收到客户端1发来的数据时,会传输短信 从客户端 1 到客户端 2(客户端 2 也使用数据交换消息)。
所以我的问题是:如何发送带有某些字段的消息?我已经知道通过函数 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;
【问题讨论】:
-
send() 不发送字符串。检查你的假设。