本文共 2366 字,大约阅读时间需要 7 分钟。
例子: //server #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/select.h> #define MAX_BUF_SIZE (1024) static char buf[MAX_BUF_SIZE]; int display_address(const char *msg, struct sockaddr_in* p_sin) { if(p_sin->sin_family != AF_INET) { fprintf(stderr, "Not an Internet socket./n"); return -1; } fprintf(stdout, "%s ==> address is: %s : %d/n", msg, inet_ntoa(p_sin->sin_addr), ntohs(p_sin->sin_port)); return 0; } int main() { int sock, serv; struct sockaddr_in sin; int size; fd_set set; FD_ZERO(&set); serv = socket(AF_INET, SOCK_STREAM, 0); if (serv == -1) { perror("server socket"); return -1; } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons(1685); if (bind(serv, (struct sockaddr *)&sin, sizeof(sin)) == -1) { perror("server bind"); return -1; } listen(serv, 5); memset(&sin, 0, sizeof(sin)); size = sizeof(sin); if (getsockname(serv, (struct sockaddr *)&sin, &size) == -1) perror("serv sockname"); display_address("server socket name", &sin); sock = accept(serv, NULL, NULL); if (sock != -1) { memset(&sin, 0, sizeof(sin)); size = sizeof(sin); if (getpeername(sock, (struct sockaddr *)&sin, &size) == -1) perror("sock peername"); display_address("sock peer name", &sin); memset(&sin, 0, sizeof(sin)); size = sizeof(sin); if (getsockname(sock, (struct sockaddr *)&sin, &size)) perror("sock sockname"); display_address("sock socket name", &sin); } close(serv); close(sock); } //client #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define MAX_BUF_SIZE (300) static char buf[MAX_BUF_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int main() { int sock; struct sockaddr_in sin; int size; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("client socket"); return -1; } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr("192.168.21.207"); sin.sin_port = htons(1685); if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) { perror("client connect"); return -1; } printf("client send %d bytes/n", size); close(sock); } 请注意 getpeername()是得到连接上来的客户端信息 getsockname()是得到本地的socket信息 |
转载地址:http://qhrci.baihongyu.com/