TCP:
server.c
复制代码
| #include<stdio.h> |
| #include<stdlib.h> |
| #include<errno.h> |
| #include<string.h> |
| #include<sys/types.h> |
| #include<netinet/in.h> |
| #include<sys/socket.h> |
| #include<sys/wait.h> |
| |
| #define PORT 1500 |
| #define BACKLOG 5 |
| |
| int main(){ |
| int sockfd,new_fd; |
| struct sockaddr_in my_addr; |
| struct sockaddr_in their_addr; |
| int sin_size; |
| |
| sockfd=socket(AF_INET,SOCK_STREAM,0); |
| if(sockfd==-1){ |
| printf("socket failed:%d",errno); |
| return -1; |
| } |
| my_addr.sin_family=AF_INET; |
| my_addr.sin_port=htons(PORT); |
| my_addr.sin_addr.s_addr=htonl(INADDR_ANY); |
| bzero(&(my_addr.sin_zero),8); |
| if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))<0){ |
| printf("bind error"); |
| return -1; |
| } |
| listen(sockfd,BACKLOG); |
| while(1){ |
| sin_size=sizeof(struct sockaddr_in); |
| new_fd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size); |
| if(new_fd==-1){ |
| printf("receive failed"); |
| } else{ |
| printf("receive success"); |
| send(new_fd,"Hello World! yyds",14,0); |
| } |
| } |
| return 0; |
| } |
client.c
复制代码
| #include<stdio.h> |
| #include<stdlib.h> |
| #include<errno.h> |
| #include<string.h> |
| #include<sys/types.h> |
| #include<netinet/in.h> |
| #include<sys/socket.h> |
| #include<sys/wait.h> |
| |
| |
| #define DEST_PORT 1500 |
| #define DEST_IP "127.0.0.1" |
| #define MAX_DATA 100 |
| |
| int main(){ |
| int sockfd,new_fd; |
| struct sockaddr_in dest_addr; |
| char buf[MAX_DATA]; |
| |
| sockfd=socket(AF_INET,SOCK_STREAM,0); |
| if(sockfd==-1){ |
| printf("socket failed:%d",errno); |
| } |
| |
| |
| |
| dest_addr.sin_family=AF_INET; |
| dest_addr.sin_port=htons(DEST_PORT); |
| dest_addr.sin_addr.s_addr=inet_addr(DEST_IP); |
| bzero(&(dest_addr.sin_zero),8); |
| |
| if(connect(sockfd,(struct sockaddr*)&dest_addr,sizeof(struct sockaddr))==-1){ |
| printf("connect failed:%d",errno); |
| } else{ |
| printf("connect success"); |
| recv(sockfd,buf,MAX_DATA,0); |
| printf("Received:%s\n",buf); |
| } |
| close(sockfd); |
| return 0; |
| } |
| |
| ------------ |
| |
| |
C语言SOCKET编程指南
tcp2:
tcp_echo_client.c
复制代码
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <stdbool.h> |
| #include <stdarg.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <ctype.h> |
| #include <errno.h> |
| #include <signal.h> |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| #include <sys/epoll.h> |
| #include <sys/ioctl.h> |
| #include <netinet/in.h> |
| #include <netinet/tcp.h> |
| #include <arpa/inet.h> |
| #include <netdb.h> |
| #include <fcntl.h> |
| |
| #define SERV_PORT 8080 |
| #define BUF_SIZE 128 |
| |
| int main(int argc, char *argv[]){ |
| if(argc < 2){ |
| fprintf(stderr, "usage: %s <MSG>\n", argv[0]); |
| exit(EXIT_FAILURE); |
| } |
| |
| int sockfd; |
| if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ |
| perror("create_sockfd error"); |
| exit(EXIT_FAILURE); |
| } |
| |
| struct sockaddr_in servaddr; |
| memset(&servaddr, 0, sizeof(servaddr)); |
| servaddr.sin_family = AF_INET; |
| if(inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr) <= 0){ |
| perror("convert_servaddr error"); |
| exit(EXIT_FAILURE); |
| } |
| servaddr.sin_port = htons(SERV_PORT); |
| |
| if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){ |
| perror("connect_sockfd error"); |
| exit(EXIT_FAILURE); |
| } |
| |
| char buf[BUF_SIZE]; |
| int nbuf = strlen(argv[1]); |
| send(sockfd, argv[1], nbuf, 0); |
| nbuf = recv(sockfd, buf, BUF_SIZE, 0); |
| buf[nbuf] = 0; |
| printf("echo msg: %s\n", buf); |
| |
| close(sockfd); |
| return 0; |
| } |
tcp_echo_server.c.c
复制代码
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <stdbool.h> |
| #include <stdarg.h> |
| #include <string.h> |
| #include <unistd.h> |
| #include <ctype.h> |
| #include <errno.h> |
| #include <signal.h> |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| #include <sys/epoll.h> |
| #include <sys/ioctl.h> |
| #include <netinet/in.h> |
| #include <netinet/tcp.h> |
| #include <arpa/inet.h> |
| #include <netdb.h> |
| #include <fcntl.h> |
| |
| #define LISTEN_PORT 8080 |
| #define BUF_SIZE 128 |
| |
| int main(void){ |
| int listenfd; |
| if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ |
| perror("create_listenfd error"); |
| exit(EXIT_FAILURE); |
| } |
| |
| struct sockaddr_in servaddr; |
| memset(&servaddr, 0, sizeof(servaddr)); |
| servaddr.sin_family = AF_INET; |
| servaddr.sin_addr.s_addr = htonl(INADDR_ANY); |
| servaddr.sin_port = htons(LISTEN_PORT); |
| |
| if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){ |
| perror("bind_listenfd error"); |
| exit(EXIT_FAILURE); |
| } |
| |
| if(listen(listenfd, SOMAXCONN) < 0){ |
| perror("listen_listenfd error"); |
| exit(EXIT_FAILURE); |
| } |
| |
| int connfd; |
| struct sockaddr_in peeraddr; |
| socklen_t peerlen = sizeof(peeraddr); |
| char buf[BUF_SIZE]; |
| int nbuf; |
| |
| for(;;){ |
| if((connfd = accept(listenfd, (struct sockaddr *)&peeraddr, &peerlen)) < 0){ |
| perror("accept_listenfd error"); |
| continue; |
| } |
| |
| nbuf = recv(connfd, buf, BUF_SIZE, 0); |
| buf[nbuf] = 0; |
| if(!strcmp(buf, "exit")){ |
| printf("exit_server\n"); |
| close(connfd); |
| break; |
| } |
| printf("new conn(%s:%d); msg: %s\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port), buf); |
| send(connfd, buf, nbuf, 0); |
| close(connfd); |
| } |
| |
| close(listenfd); |
| return 0; |
| } |
run.sh
复制代码
| #!/bin/bash |
| # ********************************************************** |
| # * Copyright (C) 2022 DCS. All rights reserved. |
| # |
| # * Author : si.cao |
| # * Email : **********@outlook.com |
| # * Create time : 2022-01-13 11:03 |
| # * Last modified : 2022-01-13 11:03 |
| # * Filename : run.sh |
| # * Description : |
| # ********************************************************** |
| for ((i=0; i<10; i++)); |
| do ./test 'www.zfl9.com'; |
| done && ./test 'exit' |
| |
c语言 - socket编程(一)
c语言 - socket编程(二)
c语言 - socket编程(三)
c语言 - socket编程(四)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律