求:北京windows下socket编程高手,一个小程序的调试,明天中午前搞定,可以有酬!!

zhmjz 2004-03-08 10:32:32
qq:5616878联系!!特急

服务器代码:
void main(int argc, char *argv[])
{
int sock=0,cnnSock=0;
int length=0,len=0;
struct sockaddr_in svrSock;
struct sockaddr cltAddr;

//网络服务初始化
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("WSAStartup error\n");
exit(1);
}

sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
printf("opening socket error\n");
exit(1);
}

//初始化服务器
length=sizeof(svrSock);
memset((void*)&svrSock,sizeof(svrSock),0);
svrSock.sin_family=AF_INET;
svrSock.sin_port=htons(port);
svrSock.sin_addr.s_addr=inet_addr("192.168.0.147");
int err=0;
err=bind(sock,(struct sockaddr*)&svrSock,length);
if(err==SOCKET_ERROR)
{
printf("binding socket error\n");
exit(1);
}
//开始在设定端口监听
if(listen(sock,SOMAXCONN)==SOCKET_ERROR)
{
printf("listen error!\n");
exit(1);
}

len=sizeof(struct sockaddr);
while(true)
{
cnnSock=accept(sock,(struct sockaddr*)&cltAddr,(int*)&len);
if(cnnSock>0)
HANDLE hThread=(HANDLE)_beginthread(&ThreadProc,4096,(void*)&cnnSock);
}
}


void __cdecl ThreadProc(void* pParam)
{
int cltSock; //该线程的连接
char myname[512];

memset(curQname,'\0',48);
cltSock=*((int*)pParam);

bool connected=true;
while(connected) //连接未断开
{
M_MSG m;
if(recv(cltSock,(char*)&m,sizeof(m),0)==SOCKET_ERROR)
break;//退出本次循环
else
{ //分析读入的中间件控制头数据

//*****************************************//
//处理7个通信客户API
switch (m.E_ID)
{
case E_connect: //Mconnect
{
};
break;
case E_open: //打开队列 -- 当前“写”队列!
{
}
break;
case E_put: // MOMPut
{
}
break;
case E_get: // MOMGet
{
for(int i=0;i<20;i++)
if(send(cltSock,(char*)&m,sizeof(m),0)!=SOCKET_ERROR)
break;
}
break;
case E_close: // MOMClose,//关闭写队列
{
}
break;
case E_disc: // MOMDisconnect
{
connected=false;
}
break;
case E_book:
break;

default: break;//error

}//end switch
}
}//退出while/recv循环

客户端代码:
extern "C" __declspec(dllexport) int __stdcall Minit()
{
//初始化socket
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("WSAStartup error\n");
return 0;
}
return 1;
}
extern "C" __declspec(dllexport) int __stdcall Mconnect()
{
struct sockaddr_in server;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("Mconnect():socket error!\n");

return 0;
}

memset((void*)&server,sizeof(server),0);
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=inet_addr(IP);

if(connect(sock,(struct sockaddr*)&server,sizeof(server))<0)
{
printf("Mconnect():socket connect error!\n");
return 0;
}
//应用验证
M_MSG m;

m.E_ID=E_connect;

strcpy(m.arg1,username);
strcpy(m.arg2,pwd);

if((send(sock,(char*)&m,sizeof(m),0))<0)
{
printf("send connect apply return error\n");
return 0;
}

return 1;
}

extern "C" __declspec(dllexport) int __stdcall Mopen(const char* pQname="")//只能打开,不能新建
{
M_MSG m;
m.E_ID=E_open;
//如果指定队列,就打开指定队列,否则就打开默认设置
if(strlen(pQname)>0)
strcpy(wqname,pQname);

strcpy(m.arg1,wqname);

if((send(sock,(char*)&m,sizeof(m),0))<0)
{
printf("send open apply error\n");
return 0;
}

return 1;
}

extern "C" __declspec(dllexport) int __stdcall Mput(unsigned long flightid,unsigned short

msgtypeid,unsigned short opnumber,unsigned short opstate,unsigned short priority,char* pData)
{
if(send(sock,(char*)&m,sizeof(m),0)<0)
{
printf("put msg to Server error\n");
return 0;
}

return 1;
}

extern "C" __declspec(dllexport) int __stdcall Mget(Message* gm)
{
M_MSG m;
m.E_ID=E_get;

if(send(sock,(char*)&m,sizeof(m),0)<0)
{
printf("send momget apply error\n");
return 0;
}
//接收数据

if((recv(sock,(char*)&m,sizeof(m),0))<0)
{
printf("recv momget reply error\n");
return 0;
}
else if(m.E_ID==E_get_succ)
{
memcpy((void*)gm,(void*)&m.m,sizeof(m.m));
return 1;
}

return 0;
}

extern "C" __declspec(dllexport) int __stdcall Mclose()
{

M_MSG m;
m.E_ID=E_close;

if(send(sock,(char*)&m,sizeof(m),0)<0)
{
printf("send momget apply error\n");
return 0;
}

return 1;
}

extern "C" __declspec(dllexport) int __stdcall Mdisc()
{
M_MSG m;
m.E_ID=E_disc;
if(send(sock,(char*)&m,sizeof(m),0)==SOCKET_ERROR)
{
printf("send disc apply error!\n");
return 0;
}

closesocket(sock);

return 1;
}
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧