问题描述
我创建了一个单独的UDP服务器应用程序和一个客户端应用程序,并且它们彼此通信。我已尝试将继承实现为该应用程序的下一步(基类:udp,子类:udpClient)。我已经为客户开发了代码,下面在我的代码中加了注释作为解释。
我在代码的最后一行遇到了问题,该对象用于调用派生类。我不知道在这里给出什么参数。我已用评论突出显示了问题区域。感谢您的帮助
EDIT:另外,50003是端口号吗?如果大约是70000,检查应该给出错误对吗?但事实并非如此。怎么了?
UDP客户端程序
#include <iostream>
#include <WS2tcpip.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
class udp {
protected:
WSADATA data;
WORD version = MAKEWORD(2,2);
int wsOk = WSAStartup(version,&data);
public:
void checkudp()
{
if (wsOk != 0)
{
cout << "Can't start Winsock! " << wsOk;
return;
}
}
};
class udp_client : public udp {
private:
sockaddr_in server;
char clientIp[256];
int argc;
char* argv[];
public:
void udpworking(*int argc,char* argv[]*) { //PROBLEM HERE with call to main function
server.sin_family = AF_INET; // AF_INET = IPv4 addresses
server.sin_port = htons(50003); // Little to big endian conversion
inet_pton(AF_INET,"127.0.0.1",&server.sin_addr); // Convert from string to byte array
// Socket creation,note that the socket type is datagram
SOCKET out = socket(AF_INET,SOCK_DGRAM,0);
// Write out to that socket
string s(argv[1]);
int sendOk = sendto(out,s.c_str(),s.size() + 1,(sockaddr*)&server,sizeof(server));
if (sendOk == SOCKET_ERROR)
{
cout << "That didn't work! " << WSAGetLastError() << endl;
}
closesocket(out);
WSACleanup();
}
};
void main()
{
udp_client obj;
obj.udpworking(); //Parameter problem with function call
}
解决方法
udp_client::udpworking
需要两个参数,您需要传入参数(在括号中)。
同样,如注释void main()
中所述,此功能不是有效的签名。只有int main()
(忽略所有参数)和int main(int argc,char **argv)
(接受命令行参数)是有效签名。
尝试这样的事情:
int main(int argc,char **argv) {
udp_client obj;
obj.udpworking(argc,argv);
return 0;
}
PS:我认为当您将其张贴在函数上时,您在函数中添加了围绕参数的星号吗? (udpworking(*int argc,char* argv[]*)
)