关于SOCKET编程的疑惑?(60分)

  • 主题发起人 主题发起人 zhang16
  • 开始时间 开始时间
Z

zhang16

Unregistered / Unconfirmed
GUEST, unregistred user!
我用c++builder编写一个客户端(用clientsocket控件),
与别人编写的服务端(用VC++编写)相连,
服务端发送和接收都用结构,
那请问客户端的clientsocket应该用什么方法发送和接收数据包(sendtext?sendbuf?sendstream?)?
 
只是对于你来说不一样罢了,对于接受方来说都一样
比如同一个 string, 你可以直接用 sendtext
或 copy 到一个 数组 里面在用 sendbuf
或读到一个 TMemoryStream 里面再用 sendstream
 
beta,你好,请问怎样将结构中不同类型的值转换成string,然后发送?
如结构: struct TcpPack {
unsigned long StartSign; //开始标志(0XFFFFFFFF)
unsigned short BlockSize; //信息包长(含StartSign BlockSize BlockType);
unsigned char BlockType; //信息类别
char *TranInfo; //交易信息包
};
 
最好不要把结构型变量转换成字符串传送,很可能会出错,因为可能有空字符。
建议拷贝到某缓冲区中利用sendbuf来传送。
char *buf;
分配内存:
buf = (char *)malloc(4096);
将数据拷贝到缓冲区
memcpy(buf,&TcpPack,sizeof(TcpPack));
......
最后别忘了释放内存。
free(buf);
 
steve,你好,想问一下下列代码中为什么会提示出错(运行时出错,编译通过)?
struct TcpPack *tcppk;
char *buf;
AnsiString s;
s=Trim(E1->Text)+Trim(E2->Text)+Trim(E4->Text)+" ";
tcppk->StartSign=0xFFFFFFFF; //这里出错
tcppk->BlockSize=10+2+1+s.Length(); //这里出错
tcppk->BlockType='1';
tcppk->TranInfo=s.c_str();
buf=(char *)malloc(4096);
memcpy(buf,&tcppk,sizeof(tcppk));
CS1->Socket->SendBuf(buf,tcppk->BlockSize);
free(buf);
 
你定义tcppk时用了:
struct TcpPack *tcppk;
这是定义了一个指向TCPPack的指针,它并没有分配内存,你给它赋值时候
就会报内存冲突了,解决方案有二:
1、struct TcpPack tcppk;
2、tcppk = (struct TcpPack*)malloc(4096);
.....................
free(tcppk);

 
多谢steve,能知道你的联系EMAIL吗?
我想和你多点交流BCB方面的知识(我原来一直用DELPHI,最近才转用C++BUILDER)
60分先奉上。
 
接受答案了.
 
呵呵,我基本上没有用过BCB,我只对Delphi和VC比较熟悉,C++都是差不多的。
我的联系E-Mail 你可以从我的个人信息里看到的。zhuan@263.net
祝好运!
 
后退
顶部