weixin_51929597
我是一个菜鸡1
采纳率0%
2021-03-03 15:30

大神能帮忙看下这段代码吗? 小白一个,感谢你能抽出你的时间来帮助我

#include<stdio.h>
#include<winsock.h>       //引入winsock头文件 
#define NUM 100

int main(void){
	/*---------------------------------*/
	/*---------------定义变量----------*/
	/*---------------------------------*/
	char Sendbuf[NUM],                //发送数据的缓冲区 
	Receivebuf[NUM];                  //接收数据的缓冲区 
	int SendLen;                      //发送数据的长度 
	int ReceiveLen;                   //接收数据的长度 
	int Length;                       //表示SOCKADDR的大小 
	
	
	SOCKET socket_server;             //定义服务器套接字
	SOCKET socket_receive;            //定义用于连接套接字
	
	SOCKADDR_IN Server_add;           //服务器地址信息结构
	SOCKADDR_IN Client_add;           //客户端地址信息结构
	
	WORD wVersionRequested ;          //字(word):unsigned short
	WSADATA wsaData;                   //库版本信息结构
	int error;                        //表示错误
	
	
	/*-----------------------------------*/
	/*----------------初始化套接字库-----*/
	/*-----------------------------------*/
	/*定义版本类型,将两个字节组成一个字,前面是低字节,后面是高字节*/
	
	wVersionRequested = MAKEWORD(2,2);
	/*加载套接字库,初始化Ws2_32.dll动态链接库*/
	error = WSAStartup(wVersionRequested,&wsaData);
	if(error!=0)
	{
		printf("加载套接字失败!\n");                //程序结束 
		return 0;
	 } 
	 /*-------判断请求加载的版本号是否符合要求*/
	 if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
	 {
	 	WSACleanup();                              //不符合,关闭套接字库
		 return 0;                                 //程序结束 
	  } 
	  
	  /*---------------------------------------*/
	  /*-------------设置链接地址--------------*/
	  /*---------------------------------------*/
	  Server_add.sin_family = AF_INET;              //地址家族,必须是 AF_INET,注意只有他不是网络字节顺序
	  Server_add.sin_addr.S_un.S_addr = htonl(INADDR_ANY);   //主机地址
	  Server_add.sin_port = htons(5000);                    //端口号
	  
	  
	  /*-----------------------------------------*/
	  /*----------------创建套接字*--------------*/
	  /*-----------------------------------------*/
	  /*AF_INET 表示指定地址族,SOCK_STREAM 表示流式套接字TCP,特定的地址家族相关的协议*/
	  socket_server = socket(AF_INET,SOCK_STREAM,0);
	  
	  /*-----------------------------------------*/
	  /*-----绑定套接字到本地的某个地址和端口上--*/
	  /*-----------------------------------------*/
	                /*---------socket_server为套接字,(SOCKADDR*)&Server_add为服务器地址*/
	  
	  if(bind(socket_server,(SOCKADDR*)&Server_add,sizeof(SOCKADDR))==SOCKET_ERROR)
	  {
	  	printf("绑定失败!\n");
	   } 
	   
	   
	   /*---------------------------------------------*/
	   /*-----------------设置套接字为监听状态--------*/
	   /*---------------------------------------------*/
	                       /*----监听状态,为连接做准备,最大等待数目为5*/
       if(listen(socket_server,5)<0)
	   {
	   	printf("监听失败!\n");
		} 
		
		
		/*----------------------------------------------*/
		/*-------------------接受连接-------------------*/
		/*----------------------------------------------*/
		
		Length=sizeof(SOCKADDR);
		/*接受客户端发送的请求,等待客户端发送connect请求*/
		socket_receive = accept(socket_server,(SOCKADDR*)&Client_add,&Length);
		if(socket_receive==SOCKET_ERROR)
		{
			printf("接受连接失败!\n");
		 } 
	   
	   
	   
	   /*------------------------------------*/
	   /*--------------进行聊天--------------*/
	   /*------------------------------------*/
	   while(1)                                  //无线循环
	   {
	   	/*---------------接受数据-----------------*/
		   ReceiveLen = recv(socket_receive,Receivebuf,100,0);
		   if(ReceiveLen<0)
		   {
		   	printf("接受失败!\n");
		   	printf("程序退出!\n");
		   	break;
			} 
			else
			{
				printf("client say:%s\n",Receivebuf);
			}
			
			/*--------------发送数据-----------------*/
			 printf("please enter message:");
			 scanf("%s",Sendbuf);
			 SendLen = send(socket_receive,Sendbuf,100,0);
			 if(SendLen<0){
			 	printf("发送失败!\n");
			 } 
		} 
		/*------------------------------------*/
		/*-------------释放套接字,关闭动态库-*/
		/*------------------------------------*/
		
		closesocket(socket_receive);                   //释放客户端的套接字资源 
		closesocket(socket_server);                    //释放套接字资源
		WSACleanup();                                  //关闭动态库链接 
	    return 0;
}

提示为:C:\Users\wang sheng hui\Desktop\C语言\tcp\collect2.exe    [Error] ld returned 5 exit status

25        C:\Users\wang sheng hui\Desktop\C语言\tcp\Makefile.win    recipe for target 'Socket.exe' failed

 

 

编译第一次不通过,第二次就通过了,然后在稍微改动一下,又是编译第一次不通过,第二次就通过了,还有编译通过了运行不了,cmd窗口都没有出现,也不是一闪而过的状态,就是没有出现

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qq_25376897 qq_25376897 1月前

    1、任务管理器 是否有之前运行的程序没有关闭

    2、是不是引入的winsock.h 里面的函数或者全局变量 跟你代码里面的重复了

    点赞 评论 复制链接分享

为你推荐