Tag: networking

SDLNet网络无法正常工作

我正在使用SDL编写一个用C语言编写的游戏。 鉴于它已经使用了SDL,SDL_image和SDL_ttf,我决定将SDL_mixer和SDL_net添加到我的引擎中。 让SDL_mixer设置和工作非常简单,但我在使用SDL_net时遇到了很多麻烦。 为了测试我使用以下规则创建了一个非常简单的应用程序: 不带参数的运行充当端口9999上的TCP服务器 使用参数运行尝试连接到端口9999上给定IP地址的服务器 以下是该程序的一些关键行(我不会发布我的整个事件驱动的SDL引擎,因为它太长了): char *host = NULL; if (argc > 1) host = argv[1]; 和… IPaddress ip; TCPsocket server = NULL; TCPsocket conn = NULL; if (host) { /* client mode */ if (SDLNet_ResolveHost(&ip,host,port) < 0) return NULL; //this is actually inside an engine method if (!(conn = SDLNet_TCP_Open(&ip))) return NULL; […]

如何检查TCP结构中的标志是否已设置?

我正在使用pcap C库来读取数据包。 目前,我使用以下内容来检查并查看struct tcphdr的标志(此结构是否在netinet/tcp.h库中定义)是否已设置: struct tcphdr *tcp = …. if(tcp->th_flags & TH_SYN) { //SYN FLAG IS SET? } 这总是可以用于检查结构中是否设置了特定的标志? 或者,还有更好的方法? 非常感谢任何建议/提示:)

在TCP流中发送消息

TCP是基于流的,这意味着您发送字节而不必将它们放在“消息”中,因此接收方可能会收到一半消息或三分之二的消息。 因此,在每个消息都是固定大小的游戏中,如果我收到一部分消息,我可以将其保留在缓冲区中,直到我收到另一部分。 这有点单调乏味,但还有其他基于消息的可靠协议吗? 可能有,但是在操作系统中没有像TCP和UDP那样实现,所以我必须使用一些库,只要它易于使用就可以了。 我总是可以制作一个有点可靠的UDP协议。 你有什么建议的?

将端口号绑定到TCP套接字(outgoin)以发送数据包

我知道将端口号绑定到用于发送数据的 TCP套接字并不容易(因为系统通常将随机端口绑定到套接字)。 但我在一篇文章中读到,通过使用一些低级网络方法,您可以将端口号绑定到TCP套接字然后用它来发送数据? 有没有人知道如何做到这一点? 我正在使用c编程语言

这是一个合法的C ++代码吗?

代码来自这里 鉴于在C ++中您可以使用C库,您会说下面的代码是合法的C ++代码吗? 如果没有,需要应用哪些更改? 此代码使用g ++编译并按预期运行。 更新:谢谢你的所有答案。 我仍然有点困惑,因为没有就此代码是否符合C ++标准达成一致。 会问另一个问题以消除我的怀疑 更新2:关闭此问题的版主:刚刚注意到问题已经结束,我觉得这很荒谬。 这是一个脚踏实地的技术问题,我收到了脚踏实地的技术答案。如果你还没有完全阅读整个主题,这里是我们已经同意的结论的直观表示: 显然,C ++不是C的超集。 解决与编码标准有关的问题是错误的。 客户: #include #include #include #include #include #include #include #include #include #include #define PORT “3490” // the port client will be connecting to #define MAXDATASIZE 100 // max number of bytes we can get at once // get sockaddr, IPv4 […]

在POSIX C中获取自己的外部IP地址

我希望获得自己的IP地址,以便将该信息发布到点对点网络。 在POSIX / C中我们有getaddrinfo(NULL, …) ,但这似乎总是返回INADDR_ANY或INADDR_LOOPBACK ,这对我来说没用。 有什么建议?

TCP连接错误115正在进行操作原因是什么?

我的应用程序创建了一个TCP连接,这是正常的工作。 但是在一个网络服务器上有很多IP说 174.XXX 54.xxx喜欢这个 当调用TCP连接(非阻塞,超时为60秒)到IP 174.XXX总是成功。 但TCP连接到同一服务器的ip 54.xxx正在失败(大多数时候)正在进行errno 115 measn操作。 你能否解释一下errno 115的可能原因是什么? 操作系统:Linux 我的TCP连接代码如下 tcp_connect(……) { int iValOpt = 0; int iLength= 0; fcnt((int)(long)SockID,F_SETFL_O_NONBLOCK); ret = connect (sockID,(struct sockaddr*)pstSockAdr,uiSockLen); if (ret < 0) { if (errno == EINPROGRESS) { stTv.tv_sec = 60; stTv.tv_usec = 0; FD_ZERO(&write_fd); FD_SET(sockID,&write_fd); iLength = sizeof(int); if (0 getsockopt(sockID,SOL_SOCKET,SO_ERROR,(void*)(&iValOpt),&iLength)) { return […]

获取我的IP地址

我在小型网络上有一台电脑,所以我的IP是192.168.2.100。 我想要获得真正的IP。 我下载了无ip客户端,但这对于这么简单的事情来说似乎很麻烦。 我创建了这个php脚本,它获得了http://www.ip-adress.com/ page并检索了它给我的ip。 有更简单的方法吗? 使用C,WSH或其他东西。 或者,如果有一个更简单的PHP方式请告诉我。 当我拿到ip时,我会将它上传到我的ftp站点,以便我可以看到ip从工作中。