C Socket客户端

Code:
  1. #include "windows.h"  
  2. #include "winsock.h"  
  3. #include "resource.h"  
  4. #include "PROCESS.H"  
  5.   
  6. #define STATUS_SEND     0  
  7. #define STATUS_REVE     1  
  8. #define STATUS_DONE     2  
  9.   
  10. #define WM_MESSAGE_REVED    (WM_USER+0)  
  11. #define WM_MESSAGE_SENDED   (WM_USER+1)  
  12.   
  13. #define PORTNUM         5000          // 端口号  
  14. #define HOSTNAME        "localhost"   // 服务器名字  
  15.                                       // 根据服务器的不同,更改上面的名字  
  16.   
  17.   
  18. typedef struct  
  19. {  
  20.     HWND    hwnd;  
  21.     BOOL    bContinue;  
  22.     SOCKET  ServerSock;  
  23. }  
  24. PARAMS,*PPARAMS;  
  25.   
  26.   
  27. // === Function Prototypes ====================================================  
  28.   
  29. BOOL WINAPI MainDlgProc( HWNDUINTWPARAMLPARAM );  
  30. void    NetworkThread(PVOID pvoid);  
  31.   
  32. // === Global Variables =======================================================  
  33.   
  34. HINSTANCE   hInst;  
  35. char        szClientA[100];                // ASCII码串  
  36. TCHAR       szClientW[100];               // Unicode串  
  37. TCHAR       szSendBuffer[100];  
  38. TCHAR szError[100];                 // 出错消息串  
  39.   
  40.   
  41. // =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的 C 语言 IPv6 Socket 客户端示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <sys/socket.h> #include <arpa/inet.h> #define PORT "8080" // 连接的端口号 int main(int argc, char *argv[]) { int sockfd; struct addrinfo hints, *servinfo, *p; int rv; char s[INET6_ADDRSTRLEN]; char message[100]; // 发送的消息 // 如果没有指定服务器的 IP 地址 if (argc != 2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if ((rv = getaddrinfo(argv[1], PORT, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } // 遍历所有结果,直到成功连接为止 for (p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("client: socket"); continue; } if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) { close(sockfd); perror("client: connect"); continue; } break; } if (p == NULL) { fprintf(stderr, "client: failed to connect\n"); return 2; } inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof s); printf("client: connecting to %s\n", s); freeaddrinfo(servinfo); // 全部都用这个结构体 // 发送消息 printf("Enter a message to send: "); fgets(message, 100, stdin); send(sockfd, message, strlen(message), 0); close(sockfd); return 0; } ``` 需要注意的是,IPv6 地址的长度比 IPv4 地址长,因此需要使用 `INET6_ADDRSTRLEN` 宏定义来给 `inet_ntop` 分配足够的空间。 此外,`getaddrinfo` 函数可以自动的获取本地主机支持的协议族和地址类型,并返回一个 `addrinfo` 结构体链表,如果返回值不为 0,则说明该函数调用失败。函数返回的 `addrinfo` 结构体中包含了目标地址的信息,例如 IP 地址、协议族、端口号等。在 `connect` 函数中,我们向目标地址发起了连接请求,如果连接成功,则返回一个新的套接字描述符,否则会返回 -1。最后,在发送完消息后,一定要关闭套接字,以释放资源。 希望这份代码能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wi-Fi研习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值