这篇文章主要介绍了c语言网络编程-标准步骤(比较简单),需要的朋友可以参考下
c语言网络编程-标准步骤,真的很简单啊
server.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>
#define PORT 4444 #define BACKLOG 5
int main(int argc, char *argv[]) { int sock_fd, new_fd; struct sockaddr_in server_addr, client_addr; int sin_size; int nbytes; int on = 1; char buffer[1024];
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); }
setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT);
if (bind(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1); }
if (listen(sock_fd, BACKLOG) == -1) { perror("listen"); exit(1); }
printf("Server start... \n");
while (1) { sin_size = sizeof(struct sockaddr_in); if ((new_fd = accept(sock_fd, (struct sockaddr *)(&client_addr), &sin_size)) == -1) { perror("accept"); exit(1); }
printf("Server get connection from %s\n", inet_ntoa(client_addr.sin_addr)); if ((nbytes = read(new_fd, buffer, 1024)) == -1) { perror("read"); exit(1); } buffer[nbytes] = '\0'; printf("Server received: %s\n", buffer); close(new_fd); }
return 0; }
client.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>
#define PORT 4444
int main(int argc, char *argv[]) { int sock_fd; struct sockaddr_in server_addr; struct hostent *host; char buffer[1024];
if (argc < 2) { perror("Need hostname"); exit(1); }
if ((host = gethostbyname(argv[1])) == NULL) { perror("gethostbyname"); exit(1); }
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); }
memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr = *((struct in_addr *)host->h_addr);
if (connect(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); }
printf("Please input something:\n"); fgets(buffer, 1024, stdin); write(sock_fd, buffer, strlen(buffer)); close(sock_fd);
return 0; }
|