导航:首页 > 编程语言 > phpsocket发送结构体

phpsocket发送结构体

发布时间:2022-07-07 09:59:14

❶ 怎么用socket传送复杂结构体

将结构体转换成char*然后再发送。注意服务端的结构体和客户端结构体要严格一致。
定长的简单,直接转成char*搞定。
如果结构体是变长的,要用到一些trick。
最简单的就是零长度的数组。
struct test
{
int aint;
char buff[0];
}

分配内存的时候 test pTest = new(sizeof(test) + n);
然后发送的长度就是 sizeof(test) + n
然后转换成char *发送过去就是了。

❷ 结构体数组如何用socket发送与接收

需要将这个结构体先存进一个线性的内存空间。先定义一个char* p,然后动态开辟空间malloc,大小是sizeof(stu),用函数memcpy,将(void*)&stu拷贝进你刚刚定义的p里面。这样就能够写进socket的缓冲区里面了。

php 怎么用socket 怎么向其他服务器发送结构体数据 - PHP进阶讨论

3#
那类似于c++中这样子的结构体要怎么实现啊?[php]typedef
struct
Msg{typedef
BYTE
Type;typedef
short
SubType;enum{??HeadRen
=
10,??HeadLen
=
sizeof(unsigned
short)
+
HeadRen
*
sizeof(char),??FarTypeLen
=
sizeof(Type),??SubTypeLen
=
sizeof(SubType),??TypeLen
=
FarTypeLen
+
SubTypeLen,??MaxSize
=
4
*
1024,??MsgBodyLen
=
MaxSize
-
HeadLen
-
TypeLen};struct
MsgHeader{??unsigned
short
msgLen;??char
Rendance[HeadRen];??MsgHeader()??{?
?memset(this,
0,
sizeof(*this));??//初始化清零??}??void
FillInHeaderV1(int
msgType,
int
bodyLen,
int
isFinish
=
1)??{?
?int
count
=
Logger::snprintf((char*)this,
HeadLen
+
TypeLen,
\"%d
%d
%d
0\",
msgType,
bodyLen,
isFinish);?
?while(count
<
HeadLen
+
TypeLen)?
?{?
?
((char*)(this))[count++]
=
\'0\';?
?}????}}MsgHead;struct
MsgCont{??Type
type;??SubType
subType;??char
msgBody[MsgBodyLen];}MsgContent;}NetMessage;[/php]

❹ socket怎么传递一个结构体数组,数组中元素为结构体。

要首先理解传输原理:
socket其实是字节流传输的,就是说传输的数据本身是无结构的,所以收、发双方要约束好传输的内容结构。

发送方:ssize_t send(int sockfd, const void *buf, size_t len, int flags); 要将要传送的结构体存储在buf里,以首地址指针的形式发送,并且指定好buff的长度。所以一般要将某结构体指针强制转换成void*格式发送。

接收方:ssize_t recv(int sockfd, void *buf, size_t len, int flags); 收到数据后,buf是首地址,所以要强制转换成约定好的结构体,若结构体名为mystruct, 则(mystruct*) buf,这样接收方就可以使用这个数据啦。
========================================================================

❺ 用socket发送结构体 却只收到其中一个数据

这个问题在于Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
改为:Ret = send(CientSocket, SendBuffer, sizeof(info), 0);

❻ php如何处理socket发过来的消息包(消息包包括消息头、消息体、校验和)

简单说两句,pack和unpack方法可以把二进制的数据变成人类认识的样子
其实结构体在内存中的样子就是分段pack出来之后连接(就是php那个 . )到一起
按照结构体定义知道长度之后,一段一段截取出来unpack
发的时候一段一段pack了连一块儿
需要注意某些长度不整(譬如char*)的字段,可能涉及到对齐问题(这个可能还跟c的编译器版本和编译参数有关)

❼ C++有结构体struct Test{WCHAR swzText[32];},PHP如何用socket发送数据给C++服务端,而且不乱码

要把PHP和C++的socket编码统一才可以的

我这里有个VB和PHP做socket的代码你可以参考下 我之前也是一直乱码 原来就是编码导致的


对了 我用的是tinkphp框架

❽ socket套接字,如何发送一个结构体

windows
下先是调用wsastartup()初始化套接子环境,并且在套接字关闭的时候清理内存。再调用socket(af_inet,socket_stream或socet_datagram,0)函数就可以创建一个套接字了,调用成功函数返回一个socket句柄。linux下只要调用socket()函数就可以创建套接字了。

❾ socket发送接收结构体

最主要的接收处理你没有说明是怎么做的阿?

sRecv 是怎么接收的?
真的接收成功了吗?

/////////////////////////////////
主要问题是你的Client 发送问题。
结构没有发送出去。

strData s;
s.iNum = 144;
sprintf(s.cName,"卡卡西");
s.uChinese = 80;
s.uMath = 89;
s.uEnglish = 70;
CString sSend;
sSend.Format("%s",(char*)&s);

这里s结构在内存中是
0x90 0x00 0x00 0x00 0x50 ....

你的sSend通过Format是得不到你想要的数据。
CString 的Format 时遇到'\0'会截断。所以实际中sSend中只有一个 0x90字符。

修改SendData函数
BOOL CClientDlg::SendData(char* sSend,int iSendLen,const unsigned int uPort )

然后调用时
if(!SendData( (char*)&s,sizeof(strData)) );
{
...
}

阅读全文

与phpsocket发送结构体相关的资料

热点内容
自己购买云主服务器推荐 浏览:422
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:192
pdf劈开合并 浏览:28
不能修改的pdf 浏览:752
同城公众源码 浏览:489
一个服务器2个端口怎么映射 浏览:298
java字符串ascii码 浏览:79
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:946
安卓导航无声音怎么维修 浏览:333
app怎么装视频 浏览:431
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491