Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ internet上带有硬编码IP的TCP套接字_C++_Sockets_Tcp_Server_Client - Fatal编程技术网

C++ internet上带有硬编码IP的TCP套接字

C++ internet上带有硬编码IP的TCP套接字,c++,sockets,tcp,server,client,C++,Sockets,Tcp,Server,Client,我想测试一个非常简单的客户机-服务器应用程序,它将使用TCP套接字在两台设备之间通过互联网发送基本消息。我不需要服务器来查找IP地址,也不需要所有的打孔工作,因为现在我只想先对外部IP进行硬编码,看看我正在做的工作是否值得追求。现在我所有的东西都在本地网络上工作,但在互联网上什么都不工作。我肯定我放的是正确的外部IP,而不是本地IP。这是我在C++端的代码(对不起,格式化,但是StAdvExcel不想接受代码):< /P> 服务器地址中的结构sockaddr; memset(&server_ad

我想测试一个非常简单的客户机-服务器应用程序,它将使用TCP套接字在两台设备之间通过互联网发送基本消息。我不需要服务器来查找IP地址,也不需要所有的打孔工作,因为现在我只想先对外部IP进行硬编码,看看我正在做的工作是否值得追求。现在我所有的东西都在本地网络上工作,但在互联网上什么都不工作。我肯定我放的是正确的外部IP,而不是本地IP。这是我在C++端的代码(对不起,格式化,但是StAdvExcel不想接受代码):< /P> 服务器地址中的结构sockaddr; memset(&server_address_tcp,0,sizeof(server_address_tcp)); 服务器地址\u tcp.sin\u family=AF\u INET; 服务器\地址\ tcp.sin \端口=htons(19663); 服务器地址\u tcp.sin\u addr.s\u addr=inet\u addr(“我的ip”); char opt_val='1'; setsockopt(pContext->tcp_sock,IPPROTO_tcp,SO_REUSEADDR,&opt_val,opt_val的大小); 如果((绑定(pContext->tcp\u sock,(struct sockaddr*)和服务器地址\u tcp, sizeof(服务器地址))<0) 错误(“无法绑定TCP套接字\n”); } int err=::侦听(pContext->tcp_sock,128); 如果(误差<0){ 错误(“无法在TCP套接字上侦听\n”); pContext->errcode=LIBUDP\u SOCKET\u错误; 返回LIBUDPSEND\u ERR; } 日志(“等待TCP连接”); 客户端中的结构sockaddr_; socklen_u t client_len=sizeof(客户); pContext->tcp\u client\u sock=accept(pContext->tcp\u sock,(struct sockaddr*)和client,&client\u len); 如果(pContext->tcp_sock<0){ 错误(“无法建立新连接\n”); pContext->errcode=LIBUDP\u SOCKET\u错误; 返回LIBUDPSEND\u ERR; }
我有一个java代码,它发送给C++部分,绑定和侦听通过,而接受永远不会通过,它就挂在那里。在本地它可以通过,而在互联网上则不能。知道我做错了什么吗?

我们可以假设“我的ip”只是一个格式正确的地址的占位符,是吗?如果没有,就从那里开始。你有什么样的网络硬件,可能还有防火墙?你跟踪过像Wireshark这样的数据包分析器发生了什么吗?是的,这是一个正确的地址。我正在追踪Wireshark,看看它是如何工作的。如果你有两个端点,每个端点只能进行出站连接,但不能接受入站连接,那么你确实需要打孔。您是否确保“服务器”端可以使用手动端口转发、UPnP或类似机制接受来自Internet的入站连接?我在编写通过Internet从java发送到python的代码时遇到了同样的问题,我需要执行portfowarding,我不知道你是否知道portfowarding,但这是一个系统,当根用户从某个端口接收数据时,你告诉他它是否在端口80上,例如,将这个连接给这台计算机,我遇到的问题是,在连接关闭之前,通过internet无法接收数据。ì希望我的经验对你有所帮助如果你没有任何问题,请告诉我`我目前在JS中的WebCoket有这个问题,我知道这个问题:-)你使用一个来自根用户的公共ip连接
86.205.119.30
我们可以假设“我的ip”只是一个正确格式地址的占位符,是吗?如果没有,就从那里开始。你有什么样的网络硬件,可能还有防火墙?你跟踪过像Wireshark这样的数据包分析器发生了什么吗?是的,这是一个正确的地址。我正在追踪Wireshark,看看它是如何工作的。如果你有两个端点,每个端点只能进行出站连接,但不能接受入站连接,那么你确实需要打孔。您是否确保“服务器”端可以使用手动端口转发、UPnP或类似机制接受来自Internet的入站连接?我在编写通过Internet从java发送到python的代码时遇到了同样的问题,我需要执行portfowarding,我不知道你是否知道portfowarding,但这是一个系统,当根用户从某个端口接收数据时,你告诉他它是否在端口80上,例如,将这个连接给这台计算机,我遇到的问题是,在连接关闭之前,通过internet无法接收数据。ì希望我的经验对你有所帮助如果你没有任何问题,请告诉我`我目前在JS中的WebCoket有这个问题我知道这个问题:-)你使用一个来自根用户的公共ip连接
86.205.119.30
struct sockaddr_in server_address_tcp;
memset(&server_address_tcp, 0, sizeof(server_address_tcp));
server_address_tcp.sin_family = AF_INET;
server_address_tcp.sin_port = htons(19663);
server_address_tcp.sin_addr.s_addr = inet_addr("my ip");
char opt_val = '1';
setsockopt(pContext->tcp_sock, IPPROTO_TCP, SO_REUSEADDR, &opt_val, sizeof opt_val);
if ((bind(pContext->tcp_sock, (struct sockaddr*) & server_address_tcp,
sizeof(server_address))) < 0)
ERR("Could not bind TCP socket\n");
}
int err = ::listen(pContext->tcp_sock, 128);
if (err < 0) {
ERR("Could not listen on TCP socket\n");
pContext->errcode = LIBUDP_SOCKET_ERROR;
return LIBUDPSEND_ERR;
}
LOG("Waiting for TCP connection");
struct sockaddr_in client;
socklen_t client_len = sizeof(client);
pContext->tcp_client_sock = accept(pContext->tcp_sock, (struct sockaddr*) & client, &client_len);
if (pContext->tcp_sock < 0) {
ERR("Could not establish new connection\n");
pContext->errcode = LIBUDP_SOCKET_ERROR;
return LIBUDPSEND_ERR;
}