源码很简单:
TempRecord.SeqNum:=100001;
//向buf写东西
PInteger(@TempRecord.Buf[1])^:=DATAGRAM;
PInteger(@TempRecord.Buf[1+INTLEN])^:=TempRecord.SeqNum;
PInteger(@TempRecord.Buf[1+2*INTLEN])^:=NEWUSERREG;
CopyMemory(@TempRecord.Buf[1+3*INTLEN],@str[1],Length(Str));
//将buf的东西写到Stream中去
SendStream.WriteBuffer(TempRecord.buf,TempRecord.BufLen);
//发送Stream
ClientUDP.SendStream(SendStream);
TempRecord.SeqNum:=100001;
//向buf写东西
PInteger(@TempRecord.Buf[1])^:=DATAGRAM;
PInteger(@TempRecord.Buf[1+INTLEN])^:=TempRecord.SeqNum;
PInteger(@TempRecord.Buf[1+2*INTLEN])^:=NEWUSERREG;
CopyMemory(@TempRecord.Buf[1+3*INTLEN],@str[1],Length(Str));
//将buf的东西写到Stream中去
SendStream.WriteBuffer(TempRecord.buf,TempRecord.BufLen);
//发送Stream
ClientUDP.SendStream(SendStream);
区别是:
一、客户端可以不掉用bind方法进行端口和Ip地址绑定,服务器端则必须调用,否则内核无法将数据发送到客户进程。
二、在监测是否有数据到达的方法有些不同,客户端一般是发送完数据马上调用RecvFrom方法读取服务器的应答。
服务器端则采用轮询的方法监测是否有数据到达,因为服务器不知道客户端什么时候发送数据。