2 u014773418 u014773418 于 2016.04.07 09:53 提问

套接字编程,使用TCP协议编写服务器程序——绑定错误10038

图片说明

不明白为什么会发生这个错误,求大神指点!具体代码如下

#pragma comment(lib,"ws2_32.lib")//第二版本32位的把lib文件添加到项目中windows套接字的动态链接库

#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>



void main(void)
{
WSADATA wsaData;            //定义一个data,data用来初始化windows套接字socket(***---这是第一步---***)
SOCKET ListeningSocket;     //定义一个套接字
SOCKET NewConnection;       //定义一个客户端套接字
SOCKADDR_IN ServerAddr;     //创建服务端地址
SOCKADDR_IN ClientAddr;     //创建客户端地址

int ClientAddrLen;          //声明客户端地址长度
int Ret;                    //检查初始化是否成功,接受了多少个字节
int Port=5150;
char DataBuffer[1024];
if((Ret=WSAStartup(MAKEWORD(2,2),&wsaData))!=0)
{
printf("WSAStartup failed with error %d\n",Ret);//初始化失败返回错误信息
system("pause");
return;
}
if((ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==INVALID_SOCKET)) //使用if判断是否创建成功
{
printf("socket failed with error %d\n",WSAGetLastError);//使用WSAGetLastError得到错误信息
WSACleanup();//结束前清理
system("pause");
return;

}
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(Port);
ServerAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if((bind(ListeningSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)))==SOCKET_ERROR)
{
printf("bind failed with error %d\n",WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
system("pause");
return;
}
if((listen(ListeningSocket,5))==SOCKET_ERROR)
{
printf("listen failed with error %d\n",WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
system("pause");
return;
}
printf("We are waiting a connection on port %d.\n",Port);
printf("Listen(正在监听)...\n");
if((NewConnection=accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen))==INVALID_SOCKET)
//在此定义一个客户端的套接字,接收后会得到一个客户端的套接字
{
printf("ACCEPT FAILED WITH ERROR %d\n",WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
system("pause");
return;
}
printf("We successfully got a connectiong from %s:%d\n",inet_ntoa(ClientAddr.sin_addr),ntohs(ClientAddr.sin_port));
if((Ret =recv(NewConnection,DataBuffer,sizeof(DataBuffer),0))==SOCKET_ERROR)
{
printf("recv failed with error %d\n",WSAGetLastError());
closesocket(NewConnection);
WSACleanup();
system("pause");
return;
}
//此时已成功接收到客户端发送来的数据,将其显示出来
printf("We successfully received %d bytes.\n",Ret);
DataBuffer[Ret]='\0';//结尾加上\0表示字符串结束
printf("%s\n",DataBuffer);
printf("Ww are now going to close the client connectiong.\n");
closesocket(NewConnection);
WSACleanup();
system("pause");
} 

1个回答

qq_26431469
qq_26431469   2016.04.08 11:13

没有特别明白你的意思

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Tcp accept 10038错误
问题:自己做着东西玩,一个对话框界面的服务器端,对话框上面有两个Button,一个用于启动服务器工作,一个用来停止服务器。第一次启动和停止的时候工作都正常,当停止服务器再启动的时候,在Tcp监听线程中accept()出错,错误代码10038。资料:MSDN上对10038的描述WSAENOTSOCK10038Scoket operation on nonsocket.Anoperation wa
socket:10038错误
winSock的一个bug:当closesocket多次错误使用时会导致问题        这几天想在一个开源的代码上进行修改,以期研发出一个产品出来。        程序原来是单线程网络程序,需要修改为多线程,修改之后,总是出问题,辅助线程中的recv函数总是运行一阵子之后收到长度为-1的数据报,导致程序运行不正确甚至崩溃。         由于是多线程,只好打日志进行调试,发
TCP套接字编程—具体流程梳理
一个上午都在调试一个服务器端监听程序,测试的客户端怎么都连不上,然后疯狂在网上搜寻答案无果,最后无意中发现竟是系统没有联网。唉,顿时就像是在debug过程中发现某处少了一个逗号是一个样的郁闷!不过这个纠结的过程却让我把TCP套接字编程的整个过程又有了重新的认识。 TCP是一种可靠的面向连接的通信协议,因此在通信之前需要确认通信的双方,称之为客户端和服务器端。一般由客户端向服务器端发送连接
基本套接字编程(1) -- tcp篇
Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。 (2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通
Java套接字编程---TCP
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket; import java.net.Unknow
c++ socket error 10038错误
socket error 10038错误是说socket无效或者被kill掉了。DWORD WINAPI RecvThread(LPVOID lpParameter){SOCKET sockClient = (SOCKET)lpParameter;if (connect(sockClient, (struct sockaddr*)&amp;amp;addrSrv, sizeof(addrSrv)) == ...
TCP套接字编程入门
概述套接字(socket)是一种通信机制,凭借这种机制,客户与服务器的通信既可以在本地单机上进行,也可以跨网络进行。 图:基本的TCP客户/服务器应用程序的套接字函数图中展示了一对TCP客户与服务器进程之间进行通信时调用套接字函数的交互情况。服务器首先启动,然后监听客户的连接。稍后客户试图连接服务器,客户连接成功后,客户给服务器发送请求,服务器处理请求,并且返回给客户一个响应。这个过程一直持续下去
传输层TCP协议——TCP套接字编程
TCP套接字编程:socket(),bind(),connect(),listen(),accept(),recv()/read()/recvfrom(),send()/write()/sendto(),close()/shutdown()
基于 TCP 协议的并发服务器程序
服务端: #include #include #include #include #include #include #include #include #include #include //线程执行函数,负责读写 void *thr_fn ( void *arg ) { int size, j; char recv_buf[1024]; int
远程连接Mysql报10038错误
首先设置root用户的host为所有IP: 进入Mysql: mysql -u