首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于Socket的SendText用法有关问题

2012-09-25 
关于Socket的SendText用法问题刚接触网络编程,有两个例子没看懂求解,procedure TForm1.Button1Click(Sende

关于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:其实道理是一样的。

以上这些,就牵扯到所谓“通讯规约”的问题了,例如某通讯规约定义如下:
登录过程数据结构为:"@" + 用户名 + "@" + 登录密码
文本消息数据结构为:"#" + 用户名 + "#" + 消息内容
……

那么,发送方就必须要严格按照这个通讯规约中定义的数据结构来发送数据,而接收方收到数据包之后,假如这个数据包中的第一个字符是@,那么接收方就知道这是一个登录过程的数据包,数据包后面部分包含了“用户名”和“登录密码”;假如这个数据包中的第一个字符是#,那么接收方就知道这是一个文本消息的数据包,数据包后面部分包含了“用户名”和“消息内容”;……;以此类推。

热点排行