tcp/ip(100分)

  • 主题发起人 主题发起人 wystrim
  • 开始时间 开始时间
W

wystrim

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器端用
socket.sendbuf(buffer,bufferlen);
客户端用
socket.readbuf(buffer,bufferlen);
但客户端的buffer中内容变成不可使用,不知如何解决?
另:服务器端建立socket后,即socket.active后
客户端与之连接后,如果不正常断开,会在服务器端产生一个异常,
并且在使用
except
on esocketerror do
...
以后仍然出现异常信息提示,不知如何解决?
//
是这样的,byte(pchar(buffer)[0])为不可用,在调试环境中
显示是inaccessible value
但,byte(pchar(buffer))有值.值是错的
试过了不在调试环境下,出错的内容不再是esocketerror,
而是说 window socket 错,感觉好象是api调用时出错,由windows产生
的错误信息.
谢谢指点
 
你是用 TClientSocket 和 TServerSocket 吗?如果是:

如果客户没有正常断开,你在服务器端又再send 东西出去,是有可能出错的,
你要处理异常

客户端的读要在 OnRead 事件读
ReceiveBuf(var Buf; Count: Integer)返回的是实际读出的字节数,要判断一下
 
buffer是什么类型的? string?

string是不能引用[0]的,因为那是string的长度。

如果想引用pchar中的内容,可以用以下方法:

var p:pchar;i:integer;

p:='test string';
{取第5个字节的值}
i:=ord((p+5)^);
 
buffer 这样定义:

buffer:array[0..xxxxx] of char

这样定义比较标准,要是定义成string,还要手工定义长度才行
 
我建议你这样,你看一看delphi的示例,
demos/internet/chat.dpr,
看完以后你就能解决你的所有的问题了,
我保证
 
后退
顶部