2 freedom wings5 freedom_wings5 于 2016.03.05 20:31 提问

c++,socket,没启动客户端,服务端显示已有204.204.204.204的ip连接了
 #include "stdafx.h"
#include "winsock2.h"
#include "iostream"
#pragma comment (lib,"ws2_32")

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsadata;
    WSAStartup(MAKEWORD(2, 2), &wsadata);
    cout << "开始创建套接字\n";
    SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct sockaddr_in  saddrin;
    saddrin.sin_family = AF_INET;
    saddrin.sin_addr.S_un.S_addr = inet_addr("INADDR_ANY");
    saddrin.sin_port = htons(9100);

    cout << "开始绑定\n";
    bind(s, (sockaddr *)&saddrin, sizeof(saddrin));

    cout << "开始监听\n";
    listen(s, SOMAXCONN);



    struct sockaddr_in sClient;
    int num = sizeof(sClient);
    SOCKET client=  accept(s, (sockaddr *)&sClient, &num);
    if (client)
    {
        cout << "已接受来自客户端的连接\n";
        cout << sClient.sin_port<<'\n';

        cout<< inet_ntoa(sClient.sin_addr)<<'\n';

        char msg[MAXBYTE] = { 0 };

        recv(client, msg, sizeof(msg), 0);
        cout << msg;

        //char msgReply[MAXBYTE ] = { 0 };
        strcpy_s(msg, "this is a reply for the test\n");
        send(client, msg, strlen(msg) + sizeof(char), 0);
        cout << "已发送消息\n";


    }
    else
    {
        cout << "无客户端的连接";
    }
    system("PAUSE");
    return 0;
}


图片说明
我的客户端还没启动,只启动了服务端,这个204.204.204.204就连接了,然后就返回了?这个ip是怎么回事?怎么解决?

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.05 21:33

204换成16进制是0xcc,我记得这是vc初始化堆栈的时候使用的数据
也就是说你accept没有成功,所以里面没数据。
楼主可以看下是不是因为没有对定义的sockaddr_in变量进行初始化,里面的ip值被默认初始化为0xcccccccc,而十六进制cc转换为十进制就是204

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 21:45

设置了sin_family还有问题?

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 21:48

你怎么不处理错误的情况啊,肯定是某个函数出错了。WSAStartup调用返回返回什么了,你不检查?

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 21:48

另给你一段参考代码

    cout << "#1 Startup" << endl;
    WSADATA wsaData;
    if( WSAStartup( MAKEWORD(2,2), &wsaData) != 0 )
    {
        cout << "WSAStartup fail to initialize" << endl;
        cout << "Error #" << WSAGetLastError() << endl;
        return 1;
    }


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VC 为什么我获取客户端ip地址总是:204.204.204.204?
int len = sizeof(SOCKADDR_IN); NewSock = accept(TCP_Sock,(sockaddr *)&stClientAddr,&len); strStuIP = inet_ntoa(stClientAddr.sin_addr); 通常是红字部不对,要取一下sizeof。
Socket编程(实现了对客户端和服务器交互)
SocketConnection实现了对客户端Socket连接的支持,通过Connector.open(String url)可以返回一个SocketConnection socket://<hostport>,前缀”socket://”必须指定,hostport是以host:port格式出现的服务器地址和连接端口字符串,服务器地址可以是主机名,也可以是IP地址,端口号是Socket服务器进行监听的端口号
通过TCP/IP协议进行客户端与服务端的通信C/C++
服务端程序:#include<stdlib.h> #include<stdio.h> #include<Winsock2.h> #include<windows.h> #pragma comment(lib , "ws2_32.lib") /* *定义线程接收的结构体 */ typedef struct { SOCKET client ; int id ; } Client_So
服务器端如何管理很多个客户端的socket连接?
问:我想请问大家一个问题,当一个服务器端面临成千上万个客户端的连接,在完成端口后,服务器程序如何管理这成千上万个客户端的连接,保证正常的通讯? 不会是有一万个客户端,就建立一万个线程来保证服务器处理客户端的数据吧! 答: 1)用完成端口 2)线程有限,因此使用线程池,逐个处
linux TCP客户端指定端口号连接服务端
Linux下面貌似没有什么直接开启或者关闭端口的命令,因为若仅仅只是开启了端口而不把它与进程相联系的话,端口的开启与关闭就显得毫无意义了(开了端口却没有程序处理进来的数据)。也就是说,Linux里面端口的活动与进程是紧密相连的,如果想要关闭某个端口,那么只要杀掉它对应的进程就可以了。   客户端代码 点击(此处)折叠或打开 #include stdio.h> #inclu
Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例
Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例服务端代码#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>int main(int argc, char *argv[]) {
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接) 通用工具类 public class SocketUtil { public static String ADDRESS = &quot;192.168.1.123&quot;; public static int PORT = 10086; /** * 读数据 * * ...
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
// WindowsSocketServer.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #pragma comment(lib,"Ws2_32.lib") using namespace std; #define PORT 8080
socket的accept函数解析以及服务器和多个客户端的端口问题
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口?     讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。    先给出一个典型的TCP/IP通信示意图。
C++ Socket C/S ,实现客户端,服务器端断开重连
// WindowsSocketServer.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include #include #include #include #include #pragma comment(lib,"Ws2_32.lib") using namespace std; #define PORT 8080 #define IP_AD