怎么发的就怎么收呀?用了结构体? typedef struct pos { int x; int y; int z; } point; point p[100]; char buff[1000]; //比如每次发10个 int len = sizeof(point)*10; memcpy(buff,p,len); serversocket.Send(buff,len); ... //接收 clientsocket.Receive(buff,len); memcpy(p,buff,len);
这个就是你自己定义的【协议】。 x y z 三个坐标,假如使用 int 变量来存储的话,那么就是 12 个字节;就像 1 楼说的,把它们定义为一个结构体,然后发送;收到后,然后按顺序一个个取出来即可。你自己试着写写看,遇到具体问题再来问。
typedef struct pos
{
int x;
int y;
int z;
} point;
point p[100];
char buff[1000];
//比如每次发10个
int len = sizeof(point)*10;
memcpy(buff,p,len);
serversocket.Send(buff,len);
...
//接收
clientsocket.Receive(buff,len);
memcpy(p,buff,len);
x y z 三个坐标,假如使用 int 变量来存储的话,那么就是 12 个字节;就像 1 楼说的,把它们定义为一个结构体,然后发送;收到后,然后按顺序一个个取出来即可。你自己试着写写看,遇到具体问题再来问。
LS的诸位仁兄都已经讲得很清楚了呢
如果你对OSI通讯协议层了解一点儿的话
其实都是定义好数据机构进行组包 解包的
g_pInput->CreateDevice(GUID_SysKeyboard,&g_pInputDevice,NULL);
g_pInputDevice->SetDataFormat(&c_dfDIKeyboard);
g_pInputDevice->SetCooperativeLevel(hWnd,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND|DISCL_NOWINKEY);
g_pInputDevice->Acquire(); }
int ReadKeyboard()//获取按键
{
int key=0;
g_pInputDevice->GetDeviceState(sizeof(g_state),g_state);
if(0x80&g_state[DIK_RIGHT])
key=4;
if(0x80&g_state[DIK_LEFT])
key=3;
if(0x80&g_state[DIK_UP])
key=1;
if(0x80&g_state[DIK_DOWN])
key=2;
return key;
}
.......
switch (ReadKeyboard()){ case 3:{x--;break;}
case 4:{x++;break;}
case 1:{z--;break;}
case 2:{z++;break;}
}
用TCP通信怎样获取其中按的键,
#include "stdafx.h"
#include "winsock.h"WSADATA wsaData; // 初始化WSA时使用
SOCKET s; // socket
SOCKADDR_IN ServerAddr; // 服务器地址
int Port=9000; // 服务器端口int _tmain(int argc, _TCHAR* argv[])
{
WSAStartup(MAKEWORD(2,2),&wsaData) ; //启动winsock的库;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) ; //初始化socket
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(Port);
ServerAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
connect(s,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));
send(s,"From a client",13,0);
while(1){
char buf[256];
memset(buf,0,sizeof(buf));
scanf("%s",buf);
send(s,buf,sizeof(buf),0);
memset(buf,0,sizeof(buf));
recv(s,buf,sizeof(buf),0);
printf("%s\n",buf);
}
closesocket(s);//关闭socket,关闭WSA
return 0;
}
这样的好处是,你想把你的类发送到SOCKET,就向CSocket去序列化;你想把你的类存到文件,就向CFile去序列化。总之,有了序列化,想往哪里存都OK。