| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 643 人关注过本帖
标题:哪位大虾能告诉我socket为什么调用出错,怎么改?
只看楼主 加入收藏
zyx1989
Rank: 1
等 级:新手上路
帖 子:86
专家分:2
注 册:2011-9-17
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:3 
哪位大虾能告诉我socket为什么调用出错,怎么改?
#include <WINSOCK2.H>
#pragma comment(lib,"ws2_32.lib")

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>



#include <stdarg.h>


 int main()
{
     int sockfd,BINE,CON,LIN,ACP,SEN,LEN,CLIENT;
     struct sockaddr_in my_addr;
     

         
     
     struct sockaddr_in remote_addr;
     
     sockfd=socket(AF_INET,SOCK_STREAM,0);//调用Socket函数//
     if(sockfd==-1)
     {
         perror("Socket错误!\n");//错误提示//
         exit(1);
     }
     

     my_addr.sin_family=AF_INET;//网络协译TCP/IP//
     my_addr.sin_port=htons(3465);//本地端口为2300//
     my_addr.sin_addr.s_addr=INADDR_ANY;//自动填入本机IP//
     memset(&my_addr,0,sizeof(struct sockaddr_in));
     
     if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr)==-1))
     {
         printf("sdfe\n");
         exit(1);
     }
     
     LIN=listen(sockfd,20);//调用listen()函数监听端口//
     if(LIN!=-1)
     {
         printf("监听端口失败!");//出错提示//
         
     }
     CLIENT=sizeof(struct sockaddr);
     ACP=accept(sockfd,(struct sockaddr*)&my_addr,&CLIENT);//accept()函数,用于接受客户端的连接请求//
     if(ACP==-1)
     {
         printf("接受请求失败!");
         
     }
     char *msg="hello ,socket!";//要发送的内容//
     LEN=strlen(msg);//将字符转化为数字//
     SEN=send(ACP,msg,LEN,0);//调用send()函数,发送信息//
     if(SEN==-1)
     {
         printf("发送失败!");
         
     
     closesocket(ACP);//断开连接//
     return(0);
     }
     closesocket(ACP);
 }
搜索更多相关主题的帖子: comment include Socket 
2011-11-11 16:26
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:10 
For Windows
开始时
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1), &wsaData );
最后时
WSACleanup( );

为游戏狂~~!!    大家努力编哈!
2011-11-11 16:43
zyx1989
Rank: 1
等 级:新手上路
帖 子:86
专家分:2
注 册:2011-9-17
收藏
得分:0 
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>



#include <stdarg.h>


 
 int main()
{
     int sockfd,BINE,CON,LIN,ACP,SEN,LEN,CLIENT,err;
     WORD wVersionRequested;
     WSADATA wsaData;
     wVersionRequested = MAKEWORD( 1, 1 );

     err = WSAStartup( wVersionRequested, &wsaData );
     if ( err != 0 ) {
     /* Tell the user that we couldn't find a useable */
     /* winsock.dll. */
     return(0);
     }


     struct sockaddr_in my_addr;
     

         
     
     struct sockaddr_in remote_addr;
   
     sockfd=socket(AF_INET,SOCK_STREAM,0);//调用Socket函数//
     if(sockfd==-1)
     {
         printf("%d\n", GetLastError());

         exit(1);
     }
     

     my_addr.sin_family=AF_INET;//网络协译TCP/IP//
     my_addr.sin_port=htons(0);//本地端口为2300//
     my_addr.sin_addr.s_addr=INADDR_ANY;//自动填入本机IP//
     memset(&my_addr,0,sizeof(struct sockaddr_in));
     
     if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)==-1))
     {
         printf("%d\n",GetLastError());
         exit(1);
     }
     
     LIN=listen(sockfd,20);//调用listen()函数监听端口//
     if(LIN!=-1)
     {
         printf("监听端口失败!");//出错提示//
         
     }
     CLIENT=sizeof(struct sockaddr);
     ACP=accept(sockfd,(struct sockaddr*)&my_addr,&CLIENT);//accept()函数,用于接受客户端的连接请求//
     if(ACP!=-1)
     {
         printf("接受请求失败!");
         
     }
     char *msg="hello ,socket!";//要发送的内容//
     LEN=strlen(msg);//将字符转化为数字//
     SEN=send(ACP,msg,LEN,0);//调用send()函数,发送信息//
     if(SEN!=-1)
     {
         printf("发送失败!");
         
     
     closesocket(ACP);//断开连接//
     return(0);
     }
     closesocket(ACP);
 }
那个我知道了,现在是bind()错误啊,错误码10014
2011-11-11 17:33
smallmoon521
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:517
专家分:1373
注 册:2008-4-21
收藏
得分:0 
你应该学会判断,要不进步很难,应该自己查错误提示
10014—WSAEFAULT
地址无效。传给Winsock函数的指针地址无效。若指定的缓冲区太小,也会产生这个错
误。
程序代码:
     my_addr.sin_family=AF_INET;//网络协译TCP/IP//
     my_addr.sin_port=htons(0);//本地端口为2300//
     my_addr.sin_addr.s_addr=INADDR_ANY;//自动填入本机IP//
     memset(&my_addr,0,sizeof(struct sockaddr_in));
好不容易设置完了,又清0了,这个错说明你没有仔细看自己的代码
还有你的bind,括号对吗?太粗心了
还有listen下面的出错处理,天。。。
不懂可以问,闻道有先后,术业有专攻。
但不思考,不仔细查代码就发上来,是不合适的

为游戏狂~~!!    大家努力编哈!
2011-11-11 19:01
快速回复:哪位大虾能告诉我socket为什么调用出错,怎么改?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033288 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved