100分求socket样例,怎么定义一个协议然后上传事件到服务器啊 现在有以客户端,需要增加一个协议,将一个已知字符串作为事件ID上传到已知服务器的指定端口,请帮我打一个模板,把整个步骤体现出来,重要的是要有注释,能明白整个流程,让我能依样画葫芦就行,请务必写得明白些简单些,要求很简单只要传一个字符串让服务器知道那个字符串就行了,一定要帮我写啊,不要copy啊,写得明白我加分,注意啊,我是socket小菜,什么都不懂啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 www.vckbase.comwww.codeproject.comwww.codeguru.com上面有好多例子,自己下载一个研究哈。 补充一下,是TCP的,西诶邪恶 /**********************************************/companyname foo protocol vertion 1.0contentlength 10 // how many char ?eventid run that X/**********************************************/foo\n1.0\n10\nrun that X\n这个就是你要发的包 我有些没怎么明白你的意思.你知道不知道你已有服务器的事件id之类的,我把两端大概都给你写出来吧.../*初始化套接字*/#define MyId 10WSAData wsadat; short int Port = 8080; //服务器端口WSAStartup(MAKEWORD(2,2),& wsadat); //socket版本协商SOCKET nsocket = socket(AF_INET, SOCK_STREAM, 0);//0表示tcp,也就是IPPROTO_TCPSOCKADDR_IN sockaddr;memset((void*)& sockaddr,0,sizeof(sockaddr));sockAddr.sin_family=AF_INET;sockAddr.sin_port=htons(Port); sockAddr.sin_addr.s_addr=inet_addr("服务器地址");/*初始化完毕*/connect (nsocket,(SOCKADDR*)&sockaddr , sizeof(sockaddr)); //连接send(nsocket,(char*)& MyId ,sizeof(MyId ),0); //发送这个任务ID./*下面就转到另一边去...就是接收端,跟上面差不多的,也是先初始化*/#define MyId 10WSADATA wsa;SOCKADDR_IN cAdress;WSAStartup(MAKEWORD(2,2),&wsa);Myclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); cAdress.sin_family = AF_INET;cAdress.sin_port = htons(port); //设置一个监听端口cAdress.sin_addr.S_un.S_addr = htons(INADDR_ANY);bind(Myclient,(SOCKADDR*)&cAdress,sizeof(cAdress)); //绑定socketlisten(Myclient,1987); //监听port哪个地方的端口,1987表示允许的连接数最多为1987个SOCKET Rsocket = accept(Myclient,(sockaddr *)&cAdress,&len) //等待接收连接/*然后在下面就接收数据*/char strRecvData[1024] = {0};recv(Rsocket , strRecvData,sizeof(strRecvData),0); //如果有数据就保存到strRecvData里面了. /*判断指令*/switch(MyId ){ case 10: //指令接收到了,就做你自己的工作了. ... break; case 11: ....}这就是大概流程,我也是个个菜鸟.呵呵..希望能提供一点点帮助.凭记忆写的..有些乱.但流程没错 任务还没派下来,客服就在催了,是多么急的,还是 hacksouls 理解菜鸟,谢谢,我在调试一个小错误 MFC对话框读取.txt文件 Socket重用問題 关于LVN 和HDN消息 求冈萨雷斯的数字图像处理电子版书 对源码有兴趣者请入 如何判断窗体是否隐藏 怎样传递recordset结构? 我在调用CAsyncSocket::Send的时候返回10014错误 開不到rc 檔T^T 如何获取剪贴板的内容 什么是设备无关性(GDI) 系统运行时提示无法获取可用资源
www.codeproject.com
www.codeguru.com
上面有好多例子,自己下载一个研究哈。
/**********************************************/
companyname foo
protocol vertion 1.0
contentlength 10 // how many char ?
eventid run that X
/**********************************************/foo\n1.0\n10\nrun that X\n这个就是你要发的包
/*初始化套接字*/
#define MyId 10
WSAData wsadat;
short int Port = 8080; //服务器端口
WSAStartup(MAKEWORD(2,2),& wsadat); //socket版本协商
SOCKET nsocket = socket(AF_INET, SOCK_STREAM, 0);//0表示tcp,也就是IPPROTO_TCP
SOCKADDR_IN sockaddr;
memset((void*)& sockaddr,0,sizeof(sockaddr));
sockAddr.sin_family=AF_INET;
sockAddr.sin_port=htons(Port);
sockAddr.sin_addr.s_addr=inet_addr("服务器地址");
/*初始化完毕*/
connect (nsocket,(SOCKADDR*)&sockaddr , sizeof(sockaddr)); //连接
send(nsocket,(char*)& MyId ,sizeof(MyId ),0); //发送这个任务ID.
/*下面就转到另一边去...就是接收端,跟上面差不多的,也是先初始化*/
#define MyId 10
WSADATA wsa;
SOCKADDR_IN cAdress;
WSAStartup(MAKEWORD(2,2),&wsa);
Myclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
cAdress.sin_family = AF_INET;
cAdress.sin_port = htons(port); //设置一个监听端口
cAdress.sin_addr.S_un.S_addr = htons(INADDR_ANY);
bind(Myclient,(SOCKADDR*)&cAdress,sizeof(cAdress)); //绑定socket
listen(Myclient,1987); //监听port哪个地方的端口,1987表示允许的连接数最多为1987个
SOCKET Rsocket = accept(Myclient,(sockaddr *)&cAdress,&len) //等待接收连接
/*然后在下面就接收数据*/
char strRecvData[1024] = {0};
recv(Rsocket , strRecvData,sizeof(strRecvData),0); //如果有数据就保存到strRecvData里面了.
/*判断指令*/
switch(MyId )
{
case 10:
//指令接收到了,就做你自己的工作了.
...
break;
case 11:
....
}
这就是大概流程,我也是个个菜鸟.呵呵..希望能提供一点点帮助.凭记忆写的..有些乱.但流程没错