|
![]() | 作者: turbo_c [turbo_c]
![]() |
登录 |
服务器端 : ―――――――――――――――――――――――――――――― #include<stdlib.h> #include<iostream.h> #include<conio.h> #include<stdio.h> #include<winsock2.h> #include<windows.h> #pragma comment(lib,"ws2_32.lib") main() { SOCKET s,sn; sockaddr_in itslf; // sockaddr addrt; unsigned long addr=inet_addr("127.0.0.1"); WSADATA wsadata; WSAStartup(0x0202,&wsadata); // from.sin_addr.s_addr=addr;//INADDR_BROADCAST; // from.sin_family=AF_INET; // from.sin_port=htons(5050); // strcpy(addrt.sa_data,"127.0.0.1"); // addrt.sa_family=AF_INET; itslf.sin_addr.s_addr=addr;//htonl(INADDR_ANY); itslf.sin_family=AF_INET; itslf.sin_port=htons(5050); int itslflen=sizeof(itslf); bool opt; opt=TRUE; s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(s == INVALID_SOCKET) printf("socket error"); // setsockopt(s,SOL_SOCKET,SOCK_STREAM,(char far *)&opt,sizeof(opt)); if(bind(s,(struct sockaddr *)&itslf,sizeof(itslf)) == SOCKET_ERROR) printf("bind error"); char buf[256]; listen(s,5); while(1) { ZeroMemory(buf,256); printf("等待...."); if(sn=accept(s,( sockaddr *)&itslf,&itslflen)==INVALID_SOCKET)printf("accept 出错"); if(recv(sn,buf,256,0) == -1)printf(" recv error\n"); //有问题 if(send(sn,buf,246,0) ==-1)printf(" send error\n"); printf("%s",buf); Sleep(2000); printf("%s\n",buf); } } [此贴被 286(unique) 在 05月18日09时26分 编辑过] |
地主 发表时间: 05-05-17 21:57 |
![]() | 回复: turbo_c [turbo_c] ![]() |
登录 |
客户端: ―――――――――――――――――――――――――――――――――――――――― #include<stdlib.h> #include<iostream.h> #include<conio.h> #include<stdio.h> #include<winsock.h> #include<windows.h> #pragma comment(lib,"ws2_32.lib") main() { // TODO: Add extra validation here SOCKET s; sockaddr_in addrto; WSADATA wsadata; char *senmsg="can you receive ?"; char a[256]; WSAStartup(0x0202,&wsadata); // s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); addrto.sin_family=AF_INET; unsigned long addr=inet_addr("127.0.0.1"); addrto.sin_addr.s_addr= addr;//htonl(INADDR_ANY); addrto.sin_port=htons(5050); bool opt=true; int alen=sizeof(addrto); s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(connect(s,(struct sockaddr FAR *)&addrto,alen) == SOCKET_ERROR){ printf("connect失败"); } if(send(s,senmsg,sizeof(senmsg),0) == -1)cout<<WSAGetLastError()<<endl; printf("s :%s\n",senmsg); recv(s,a,256,0); printf("a :%s\n",a); printf("s :%s",senmsg); } |
B1层 发表时间: 05-05-17 21:58 |
![]() | 回复: turbo_c [turbo_c] ![]() |
登录 |
连个能连上,但就是recv函数有问题接收不到, 请大哥帮我看看! |
B2层 发表时间: 05-05-17 21:59 |
![]() | 回复: wxngzybb [wxngzybb] ![]() |
登录 |
大哥哥 你的itslf.sin_addr.s_addr=addr是不是还有一层才付值 是不是该itslf.sin_addr.S_un.S_addr=addr大哥哥 |
B3层 发表时间: 05-05-17 23:19 |
![]() | 回复: turbo_c [turbo_c] ![]() |
登录 |
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; 好像是这样的吧,,不少吧 |
B4层 发表时间: 05-05-17 23:36 |
![]() | 回复: 286 [unique] ![]() |
登录 |
server端: while(1) { ZeroMemory(buf,256); printf("等待...."); if((sn=accept(s,( sockaddr *)&itslf,&itslflen)) ==INVALID_SOCKET) <---------此处写法 printf("accept 出错"); else <------变成二选一。 { if(recv(sn,buf,256,0) == SOCKET_ERROR)printf(" recv error\n"); //有问题 if(send(sn,buf,246,0) ==SOCKET_ERROR)printf(" send error\n"); printf("%s",buf); } Sleep(2000); //printf("%s\n",buf); } |
B5层 发表时间: 05-05-18 09:24 |
![]() | 回复: 286 [unique] ![]() |
登录 |
每个程序最后都应加上shutdown 和close(sock),养成谁申请,谁关闭的习惯。 |
B6层 发表时间: 05-05-18 09:26 |
![]() | 回复: wxngzybb [wxngzybb] ![]() |
登录 |
286大哥哥 我提个bug哈 你的程序会耗尽socket的 要养成关闭socket苗数字的好习惯 |
B7层 发表时间: 05-05-20 14:41 |
![]() | 回复: 286 [unique] ![]() |
登录 |
![]() ![]() 请兄弟指明“苗数字”是什么呀?呵呵,我还真没看出来是哪的问题导致耗尽。 ![]() ![]() |
B8层 发表时间: 05-05-20 15:08 |
![]() | 回复: wxngzybb [wxngzybb] ![]() |
登录 |
while(1) { ZeroMemory(buf,256); printf("等待...."); if((sn=accept(s,( sockaddr *)&itslf,&itslflen)) ==INVALID_SOCKET) <---------此处写法 printf("accept 出错"); else <------变成二选一。 { if(recv(sn,buf,256,0) == SOCKET_ERROR)printf(" recv error\n"); //有问题 if(send(sn,buf,246,0) ==SOCKET_ERROR)printf(" send error\n"); printf("%s",buf); } Sleep(2000); 你觉得不会阿 |
B9层 发表时间: 05-05-20 23:06 |
![]() | 回复: 286 [unique] ![]() |
登录 |
应该不会吧?![]() |
B10层 发表时间: 05-05-23 09:15 |
![]() | 回复: wxngzybb [wxngzybb] ![]() |
登录 |
server端: while(1) { ZeroMemory(buf,256); printf("等待...."); if((sn=accept(s,( sockaddr *)&itslf,&itslflen)) ==INVALID_SOCKET) <---------此处写法 printf("accept 出错"); else <------变成二选一。 { if(recv(sn,buf,256,0) == SOCKET_ERROR)printf(" recv error\n"); //有问题 if(send(sn,buf,246,0) ==SOCKET_ERROR)printf(" send error\n"); printf("%s",buf); } Sleep(2000); //printf("%s\n",buf); (在这里必须要关闭套接口描述字sn) } 不过这种单一进程的结构感觉不到这个重要性,多进程的结构,连接一多就会崩溃 |
B11层 发表时间: 05-05-23 19:39 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号