网上找的,但是运行错误,不知道为什么?求大佬帮忙!

zx1859319 2018-12-13 04:57:45
#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();
}
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
@风轻云淡_ 2018-12-13
  • 打赏
  • 举报
回复
它这肯定是windows系统,因为#pragma comment(lib,"ws2_32.lib")这种包含附加库的形式是vs专用的,楼主还是贴出报错信息或者错,错误描述吧
_ZGq 2018-12-13
  • 打赏
  • 举报
回复
1. 你是在Windows系统里吗?如果不是那肯定错了。<winsock2.h>是Windows的库。
2. 最后没有 return 0; ,这有可能会导致警告,如果你开了[-Werror],那就出错了。
datoulaile123 2018-12-13
  • 打赏
  • 举报
回复
不说说出了什么错吗

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧