谁帮我看看这个socket的sendto函数哪里错了?返回的错误代码是10038
谁帮我看看这个socket的sendto函数哪里错了?返回的错误代码是10038
// Server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Winsock2.h>
#include <stdio.h>
#include"iostream"
using namespace std;
#define MAX_LENGTH 1024*1
int _tmain(int argc, _TCHAR* argv[])
{
system("COLOR F0");
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup(wVersionRequested, &wsaData) != 0)//初始化ws2_32.dll动态库
{
printf("WSAStartup() failed!\n");//Winsock初始化错误
exit(-1);
}
if (wsaData.wVersion != wVersionRequested)
{
printf("The version of Winsock is not suited!\n");//Winsock版本不匹配
WSACleanup();//结束对ws2_32.dll的调用
exit(-2);
}
//说明ws2_32.dll正确加载
printf("Load ws2_32.dll successfully!\n");
//获取本机IP地址
char PCname[100] = { "" };
char *IPaddress = NULL;
gethostname(PCname, sizeof(PCname));
printf("Local Hostname is %s.\n", PCname);
struct hostent FAR * lpHostEnt = gethostbyname(PCname);
if (lpHostEnt == NULL)
{
//产生错误
printf("gethostbyname failed!\n");
return 0;
}
//获取IP
LPSTR lpAddr = lpHostEnt->h_addr_list[0];
if (lpAddr)
{
struct in_addr inAddr;
memmove(&inAddr, lpAddr, 4);
//转换为标准格式
IPaddress = inet_ntoa(inAddr);//将一个32位数字表示的IP地址转换成点分十进制IP地址字符串
if (sizeof(IPaddress) == 0)
printf("get host IP failed!\n");
else
printf("Local HostIP is %s.\n", IPaddress);
}
//创建套接字
SOCKET servsock, clisock;
printf("Create Socket...\n");
servsock = socket(AF_INET, SOCK_DGRAM, 0);//数据报套接字
clisock = socket(AF_INET, SOCK_DGRAM, 0);
int servport = 5555;
int iSockErr = 0;
//定义服务器地址结构
sockaddr_in udpaddr, cliaddr;
memset(&udpaddr, 0, sizeof(udpaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
int clilen = sizeof(cliaddr);
udpaddr.sin_family = AF_INET;
udpaddr.sin_port = htons(servport);
//将一个点分十进制IP地址字符串转换成32位数字表示的IP地址
udpaddr.sin_addr.s_addr = inet_addr(IPaddress);//"127.0.0.1"//INADDR_ANY
//绑定套接字到服务器地址结构
printf("Binding...\n");
iSockErr = bind(servsock, (sockaddr *)&udpaddr, sizeof(udpaddr));
if (iSockErr == SOCKET_ERROR)
{
printf("Binding failed:%d\n", WSAGetLastError());//根据不同的错误类型进行不同的处理
exit(-3);
}
clisock = accept(servsock, (struct sockaddr *)&cliaddr, &clilen);
int len = 0;
//函数调用成功,进行其他处理
FILE *fp = NULL;
errno_t err;
err = fopen_s(&fp,"Picture.jpg", "rb");
if (fp == NULL){
printf("Open Mp3 File Failed!\n");
exit(-5);
}
char buffer[MAX_LENGTH] = "\0";
char *bufptr = buffer;
int i = 0;
while (!feof(fp))
{
int iBytesRead = fread(bufptr,1,MAX_LENGTH,fp);
int iRet = sendto(clisock, buffer, iBytesRead, 0, (struct sockaddr*)&cliaddr, clilen);
if (iRet == SOCKET_ERROR){
int errNo = WSAGetLastError();
printf("send file failed!\n");
printf("错误代码:%d\n", errNo);
closesocket(clisock);
break;
}
else if (iRet == 0)
{
printf("send mp3 file successfully!\n");
break;
}
printf("send packet %d lenth: %d\n", i++, iBytesRead);
Sleep(120);
}
//关闭连接
shutdown(servsock, 2);
closesocket(servsock);
WSACleanup();
return 0;
}