Client端Socket与Server端Socket都采用非阻塞连接。
分别在Client端与Server端定义如下结构:
xMessageID = (
MidClientLogin, // 用户登录请求
MidClientLoginS, // 用户登录请求成功
MidClientInfoRequest, // 客户信息请求
MidClientInfoResponse, // 客户信息反馈
MidClientUpLine, // 客户上线通知
MidClientDownLine, // 客户下线通知
MidServerExit, // 服务器关闭通知
MidClientToClient, // 客户间信息传递
MidBroadCast // 广播消息
);
TDataPackage = record
MessageId : xMessageID; //消息索引;
Sender : String; //发送者,服务器="Server";
Receiver : String; //接收者,如有多个接收者,则以"-"间开;
Data : String; //数据内容,如有多项内容,则以";"间开;
end;
Var
SendPackage : TDataPackage; //数据发送包
ReceivePackage : TDataPackage; //数据接收包在Client端:
with SendPackage do begin
MessageId:=MidClientLogin;
……
end;
ClientSocket.socket.sendbuf(SendPackage,SizeOf(SendPackage));在Server端的OnClientRead事件里:
Socket.ReceiveBuf(ReceivePackage,SizeOf(ReceivePackage));
case ReceivePackage.MessageID of
MidClientLogin: begin
SendPackage.MessageId:=MidClientLoginS;
SendPackage.Sender:='Server';
SendPackage.Receiver:=ReceivePackage.Sender;
SendPackage.Data:='Successful';
Socket.SendBufSendPackage,SizeOfSendPackage));
end;
MidClientInfoRequest: begin
ShowMessage('bbb');
end;
end;
出错,晕了。
分别在Client端与Server端定义如下结构:
xMessageID = (
MidClientLogin, // 用户登录请求
MidClientLoginS, // 用户登录请求成功
MidClientInfoRequest, // 客户信息请求
MidClientInfoResponse, // 客户信息反馈
MidClientUpLine, // 客户上线通知
MidClientDownLine, // 客户下线通知
MidServerExit, // 服务器关闭通知
MidClientToClient, // 客户间信息传递
MidBroadCast // 广播消息
);
TDataPackage = record
MessageId : xMessageID; //消息索引;
Sender : String; //发送者,服务器="Server";
Receiver : String; //接收者,如有多个接收者,则以"-"间开;
Data : String; //数据内容,如有多项内容,则以";"间开;
end;
Var
SendPackage : TDataPackage; //数据发送包
ReceivePackage : TDataPackage; //数据接收包在Client端:
with SendPackage do begin
MessageId:=MidClientLogin;
……
end;
ClientSocket.socket.sendbuf(SendPackage,SizeOf(SendPackage));在Server端的OnClientRead事件里:
Socket.ReceiveBuf(ReceivePackage,SizeOf(ReceivePackage));
case ReceivePackage.MessageID of
MidClientLogin: begin
SendPackage.MessageId:=MidClientLoginS;
SendPackage.Sender:='Server';
SendPackage.Receiver:=ReceivePackage.Sender;
SendPackage.Data:='Successful';
Socket.SendBufSendPackage,SizeOfSendPackage));
end;
MidClientInfoRequest: begin
ShowMessage('bbb');
end;
end;
出错,晕了。
rdd:integer;
begin
......
rdd:=Socket.ReceiveBuf(ReceivePackage,2000);
....
end;rdd为ReceivePackage的实际大小
另外,建议将string型数据改为char的数组.