关于Socket的SendText用法问题
刚接触网络编程,有两个例子没看懂求解,
procedure TForm1.Button1Click(Sender: TObject);
var str1:string;
begin
str1:=inputbox('建立连接','请输入IP','127.0.0.1');
if trim(str1)<>'' then
begin
clientsocket1.Port:=5555;//server port
clientsocket1.host:=str1;
try
clientsocket1.active:=true;
str1:=inputbox('建立连接','请输入昵称','泡泡');
clientsocket1.Socket.SendText('昵称@'+str1);//这里为什么要加个'昵称@'呢,直接发送str1不可以吗? showmessage('连接失败');
end;
end;
end;
例2
procedure TfrmMain.SendSocket (sendstr: string);
const
code: byte = 1;
begin
if CSocket.Socket.Connected then begin
CSocket.Socket.SendText ('#' + IntToStr(code) + sendstr + '!');[color=#FF0000][/color]//这里也不明白有何用意
Inc (code);
if code >= 10 then code := 1;
end;
end;
[解决办法]
SendText就是通过Socket发送一个字符串过去。
问题1:clientsocket1.Socket.SendText('昵称@'+str1);//这里为什么要加个'昵称@'呢,直接发送str1不可以吗?
回答1:完全可以,你发送什么字符串都可以,至于这里为什么要添加一个'昵称@’,只是为了便于接收方来分类处理发送方发送过来的字符串而已。
问题2:CSocket.Socket.SendText ('#' + IntToStr(code) + sendstr + '!');[color=#FF0000][/color]//这里也不明白有何用意
回答2:其实道理是一样的。
以上这些,就牵扯到所谓“通讯规约”的问题了,例如某通讯规约定义如下:
登录过程数据结构为:"@" + 用户名 + "@" + 登录密码
文本消息数据结构为:"#" + 用户名 + "#" + 消息内容
……
那么,发送方就必须要严格按照这个通讯规约中定义的数据结构来发送数据,而接收方收到数据包之后,假如这个数据包中的第一个字符是@,那么接收方就知道这是一个登录过程的数据包,数据包后面部分包含了“用户名”和“登录密码”;假如这个数据包中的第一个字符是#,那么接收方就知道这是一个文本消息的数据包,数据包后面部分包含了“用户名”和“消息内容”;……;以此类推。