Math Dash 2022-03-02 15:41 采纳率: 92.8%
浏览 110
已结题

C语言网络编程,如何更改自己编的程序的本地ip?

我的ip地址只能在内部使用

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
main()
{
    WSADATA wsaData;
    int err=WSAStartup(MAKEWORD(2,2),&wsaData);
    SOCKET sock=socket(AF_INET,SOCK_STREAM,0);//*初始化
    struct sockaddr_in serv_addr2;
    serv_addr2.sin_family=2;//*IPv4地址
    serv_addr2.sin_addr.s_addr=inet_addr("192.168.2.2");//*ip
    serv_addr2.sin_port=htons(2305);//*端口号
    bind(sock,(struct sockaddr*)&serv_addr2,sizeof(serv_addr2));
    int f=listen(sock,200);//*监听
    int len=sizeof(struct sockaddr_in);
    SOCKADDR clntaddr;
    SOCKET data;
    data=accept(sock,&clntaddr,&len);//*接收请求
    char *data2;
    data2=(char*)malloc(sizeof(char)*1024*1024);
    unsigned long long int length=0;
    while(length<1024*1024)
    {
        data2[length]='a';
        length++;
    }
    data2[length]='\0';
    int j;
    send(data,data2,1024*1024,0);//*发送信息
    closesocket(sock);
    closesocket(data);
    free(data2);
    //*关闭套接字 
    WSACleanup();
    system("pause");
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <winsock2.h>
main()
{
    char ip[30];
    WSADATA wsaData;
    int err=WSAStartup(MAKEWORD(1,0),&wsaData);
    SOCKET sock=socket(AF_INET,SOCK_STREAM,0);//*初始化
    struct sockaddr_in serv_addr;
    serv_addr.sin_family=AF_INET;//*IPv4地址 
    serv_addr.sin_addr.s_addr=inet_addr("192.168.2.2");//*ip
    serv_addr.sin_port=htons(2305);//*端口号
    connect(sock,(SOCKADDR*)&serv_addr,sizeof(serv_addr));
    system("pause");
//   listen(sock,200);
    char *data;
    data=(char*)malloc(sizeof(char)*1024*1024);
    data[1024*1024]='\0';
    int j;
    recv(sock,data,1024*1024,0);
    printf("%s",data);
    free(data);
    closesocket(sock);//*关闭套接字 
    WSACleanup();
    system("pause");
    return 0;
}

应该怎么修改ip,才能在保证网络正常通信的同时又能将信息通过自己编的程序发送到互联网?

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-03-02 15:49
    关注

    可以用这个表示:INADDR_ANY,服务器端用着个,也就是你服务器72行的代码改成(我记得0.0.0.0也可以,你试试)
    serv_addr2.sin_addr.s_addr = htonl(INADDR_ANY);
    然后客户端连接的时候,你就查一下服务器的ip,然后填入就好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 修改了问题 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同