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

问题描述

套接字编程,使用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 %dn",Ret);//初始化失败返回错误信息
system("pause");
return;
}
if((ListeningSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==INVALID_SOCKET)) //使用if判断是否创建成功
{
printf("socket failed with error %dn",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 %dn",WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
system("pause");
return;
}
if((listen(ListeningSocket,5))==SOCKET_ERROR)
{
printf("listen failed with error %dn",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 %dn",WSAGetLastError());
closesocket(ListeningSocket);
WSACleanup();
system("pause");
return;
}
printf("We successfully got a connectiong from %s:%dn",inet_ntoa(ClientAddr.sin_addr),ntohs(ClientAddr.sin_port));
if((Ret =recv(NewConnection,DataBuffer,sizeof(DataBuffer),0))==SOCKET_ERROR)
{
printf("recv failed with error %dn",WSAGetLastError());
closesocket(NewConnection);
WSACleanup();
system("pause");
return;
}
//此时已成功接收到客户端发送来的数据,将其显示出来
printf("We successfully received %d bytes.n",Ret);
DataBuffer[Ret]='';//结尾加上表示字符串结束
printf("%sn",DataBuffer);
printf("Ww are now going to close the client connectiong.n");
closesocket(NewConnection);
WSACleanup();
system("pause");
} 

解决方案

没有特别明白你的意思

时间: 2024-09-18 15:19:33

socket-套接字编程,使用TCP协议编写服务器程序——绑定错误10038的相关文章

windows和linux的tcp套接字编程实例代码

windows下面的代码如下面 //Server.cpp #include <iostream> #include <windows.h> #define IP "127.0.0.1" #define PORT 8888 #pragma comment(lib,"ws2_32.lib") using namespace std; char* GetTime(); int main() {     WSADATA wsaData;     WO

Socket套接字通信原理

Socket套接字通信原理 Tcp/IP协议关系图     Socket在哪里?  原来Socket在这里 Socket是什么呢?        Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. TCP协议 三次握手 四次握手断开 UDP协议   问题 1.为什么握手需要3次,断开需要4

怎么解决C#套接字编程异常&amp;amp;quot;以一种访问权限不允许的方式做了一个访问套接字的尝试&amp;amp;quot;

问题描述 我想问一下,我在使用c#套接字编程做了一个ping应用程序.调试的时候出现一个异常,"以一种访问权限不允许的方式做了一个访问套接字的尝试".网上说是端口或ip冲突,但是我的程序里没有明确使用端口号这些,你觉得可能是什么原因? 解决方案 解决方案二:Socket构造函数的参数搭配错误解决方案三:引用1楼Poopaye的回复: Socket构造函数的参数搭配错误 每次执行到socketsocket=newsocket(AddressFamily.InterNetwork,sock

Windows Socket网络编程(二) 套接字编程原理

一.客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model).该模式的建立基于以下两点:1.非对等作用:2.通信完全是异步的.客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1.打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求. 2.等待客户请求到达该端口. 3.接收到重复服务请求,处理该请求并发送应答信号. 4.返回第二步,等待另一客户

TCP套接字编程模型及实例

摘要:     本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析.   PS:本文权当复习套接字编程的读书笔记.   一.TCP套接字编程模型     同一台计算机上运行的进程可以利用管道.消息队列.信号量.共享内存等进行相互通信,不同计算机上运行的进程可以通过套接字网络IPC接口进行相互通信.套接字编程基本步骤如下图所示: 图 TCP套接字编程模型[1] 二.源代码     本

【转】Windows Socket网络编程(二)----套接字编程原理

Windows Socket 网络编程(二) -- 套接字编程原理作者: 冰点工作室 小鹰 一.客户机/服务器模式在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model).该模式的建立基于以下两点:1.非对等作用:2.通信完全是异步的.客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下)1.打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求.2.等待客户请求到达该端

《计算机网络:自顶向下方法(原书第6版)》一2.7 TCP套接字编程

2.7 TCP套接字编程 我们已经看到了一些重要的网络应用,下面就探讨一下网络应用程序是如何实际编写的.在2.1节讲过,典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字读出和写入数据彼此之间进行通信.开发者创建一个网络应用时,其主要任务就是编写客户程序和服务器程序的代码.网络应用程序有两类.一类是实现在协议标准(如一个RFC或某种其他标准文档)中所定义的操作:这样的应用程序又称为"

python socket网络编程步骤详解(socket套接字使用)_python

一.套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要.套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳.许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持.三种最流行的套接

VC中TCP实现 异步套接字编程的原理+代码

所谓的异步套接字编程就是  调用了 如下函数   WSAAsyncSelect   设置了 套接字的状态为异步,有关函数我会在下面详细介绍... 异步套接字解决了 套接字编程过程中的堵塞问题 ...... 什么是堵塞?请看下面  你可能有过这样的体会  在  VC编写基于界面的网路程序时候  ,调用 recv recvfrom   accept  等函数的时候 整个程序的主线程进入堵塞状态直到 有连接或者信息的到来.  我们可以利用多线程的方法解决主线程堵塞的问题,但是我们如果一个程序需要多个套