网上找的,但是运行错误,不知道为什么?求大佬帮忙!
#include<fstream>
#include<iostream>
#include<string.h>
#include<time.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(int argc, char* argv[])
{
//检查输入命令格式
if (argc != 2)
{
cout << "please input command:UdpServer server_port" << endl;
return 0;
}
//建立与Socket库绑定
WSADATA WSAData;
if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
{
cout << "WSAStartup error!" << endl;
return 0;
}
//创建数据报Socket
SOCKET sock;
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET)
{
cout << "Socket create error!" << endl;
return 0;
}
//初始化本地Socket
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons((unsigned short)atoi(argv[1]));
serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
int serveraddrlen = sizeof(serveraddr);
//端口与IP地址绑定
int nBind;
nBind = bind(sock, (sockaddr*)&serveraddr, sizeof(serveraddr));
if (nBind == SOCKET_ERROR)
{
cout << endl << "Socket bind error!" << endl;
return 0;
}
//初始化远程Socket
sockaddr_in clientaddr;
int clientaddrlen = sizeof(clientaddr);
while (true)
{
//设置接收缓冲区
char recvbuf[20];
memset(recvbuf, '\0', sizeof(recvbuf));
//通过端口接收数据
int nRecv;
nRecv = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&clientaddr, &clientaddrlen);
if (nRecv == SOCKET_ERROR)
{
cout << "Socket receive error!" << endl;
return 0;
}
cout << "UDP Server Receive: " << recvbuf << endl;
//设置发送缓冲区
char sendbuf[1500];
memset(sendbuf, '\0', sizeof(sendbuf));
//判断命令类型
if (strcmp(recvbuf, "getfile") == 0) {
fstream infile;
infile.open("input", ios::in);
infile.seekg(0, ios::end);
int nlength = infile.tellg();
infile.seekg(0, ios::beg);
infile.read(sendbuf, nlength);
}
//通过端口发送数据
int nSend;
nSend = sendto(sock, sendbuf, strlen(sendbuf), 0, (sockaddr*)&clientaddr, clientaddrlen);
if (nSend == SOCKET_ERROR) {
cout << "Socket send error!" << endl;
return 0;
}
if (strcmp(recvbuf, "gettime") == 0) {
//获得当前系统时间
time_t CurTime;
time(&CurTime);
strftime(sendbuf, sizeof(sendbuf), "%Y-%m-%d %H%M:%S", localtime(&CurTime));
//通过端口发送数据
int nSend;
nSend = sendto(sock, sendbuf, sizeof(sendbuf), 0, (sockaddr*)&clientaddr, clientaddrlen);
if (nSend == SOCKET_ERROR) {
cout << "Socket send error" << endl;
return 0;
}
}
cout << "udp server sned" << send << endl;
//通过端口接收数据
nRecv = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&clientaddr, &clientaddrlen);
if (nRecv == SOCKET_ERROR) {
cout << "socket receive error!" << endl;
return 0;
}
if (strcmp(recvbuf, "command ok") != 0) {
return 0;
}
}
closesocket(sock);
WSACleanup();
}