2023/4/20

news/2024/11/29 7:56:39/

脱离笔记完成TCP服务器客户端搭建。

//server
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>#define ERR_MSG(msg) do{\fprintf(stderr, "line:%d\n", __LINE__);\perror(msg);\
}while(0)#define IP "192.168.31.69"
#define PORT 8888int main(int argc, const char *argv[])
{int sfd = socket(AF_INET, SOCK_STREAM, 0);if(sfd < 0){ERR_MSG("socket");return -1;}struct sockaddr_in  sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0){ERR_MSG("bind");return -1;}printf("bind success\n");if(listen(sfd, 128) < 0){ERR_MSG("listen");return -1;}printf("listen success\n");struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);int newfd = accept(sfd, (struct sockaddr *)&cin, &addrlen);if(newfd < 0){ERR_MSG("accept");return -1;}printf("连接成功\n");char buf[128] = "";ssize_t res = 0;while(1){bzero(buf, sizeof(buf));res = recv(newfd, buf, sizeof(buf), 0);if(res < 0){ERR_MSG("recv");return -1;}else if(0 == res){printf("客户端下线\n");break;}//发送if(send(newfd, buf, sizeof(buf), 0), 0){ERR_MSG("send");return -1;}printf("发送成功\n");}close(sfd);	close(newfd);return 0;
}
//client#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>#define ERR_MSG(msg) do{ \fprintf(stderr, "line:%d\n", __LINE__); \perror(msg); \
}while(0)#define IP "192.168.31.69"
#define PORT 8888int main(int argc, const char *argv[])
{int cfd = socket(AF_INET, SOCK_STREAM, 0);if(cfd < 0){ERR_MSG("socket");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) < 0){ERR_MSG("connect");return -1;}printf("connect success\n");char buf[128] = "";ssize_t res = 0;while(1){bzero(buf, sizeof(buf));printf("请输入:");fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] = '\0';if(send(cfd, buf, sizeof(buf), 0) < 0){ERR_MSG("send");return -1;}printf("send success\n");bzero(buf, sizeof(buf));res = recv(cfd, buf, sizeof(buf), 0);if(res < 0){ERR_MSG("recv");return -1;}else if(0 == res){printf("server is down\n");break;}printf(" : %s__%d__\n", buf, __LINE__);}close(cfd);return 0;
}


http://www.ppmy.cn/news/459464.html

相关文章

2023/4/21

1. 将UDP服务器客户端脱离笔记重新搭建&#xff08;上交&#xff09; 2. 完成下载上传&#xff08;上交&#xff0c;必须完成下载&#xff0c;上传尽力完成&#xff09; 下载客户端 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<…

2023.04.04

1.终端输入行数&#xff0c;打印金字塔图案 //代码 #include<stdio.h>int main(int argc, const char *argv[]) {int n;printf("请输入行数:\n");scanf("%d", &n);int i,j;i 1;while(i<n){j0;while(j<n-i){putchar( ); //打印前面的空格…

2023.1.4

打印矩阵 #include <iostream>using namespace std; //二维数组的 值传递 void print2D(int a[100][100], int row, int col) {for(int i0; i<row;i){for(int j0; j<col; j)cout << a[i][j] << ;cout <<endl;} }int main() {int a[100][100];in…

2023.4.3 1004

1004 #include <iostream> using namespace std; int main() { int n; cin >> n; while (n--) { int a, b; cin >> a >> b; cout << a b << endl; } return 0; } 1.while (n--)是一个循环语句&#xff0c;它的意思是&#xff1a;先…

线性DP入门笔记(3)超级楼梯 HDU-2041

题目&#xff1a;问题 - 2041 (hdu.edu.cn) 思路&#xff1a;每次只能走一个台阶或两个台阶&#xff0c;那么走到每个台阶所需要的方法应该为前两个台阶方法之和&#xff0c;因此除了边界值&#xff08;前三个台阶方法为 0 1 2&#xff09;&#xff0c;其他台阶正好符合斐波那契…

HLOJ 2041 统计字符个数

输入若干的字符串&#xff0c;每个字符串中只包含数字字符和大小写英文字母&#xff0c;统计字符串中有出现的不同字符的出现次数。 输入格式: 测试数据有多组&#xff0c;处理到文件尾。每组测试输入一个字符串&#xff08;不超过80个字符&#xff09;。 输出格式: 对于每…

HDU 2041

由题目可知&#xff0c;每次只能走一级或两级。 因此从第一级走上第二级只能走一步&#xff0c;只有1种走法。 从第一级走上第三级&#xff0c;可以从第一级直接走两步&#xff0c;也可以从第二级走一步。有2种走法 走上第n级&#xff0c;可以从第n-1级走一步上来&#xff0c;也…

差分思想(2041. 干草堆)

差分是一种算法。 先看AcWing上的一道题目↓ 贝茜对她最近在农场周围造成的一切恶作剧感到抱歉&#xff0c;她同意帮助农夫约翰把一批新到的干草捆堆起来。 开始时&#xff0c;共有 N 个空干草堆&#xff0c;编号 1∼N。 约翰给贝茜下达了 K 个指令&#xff0c;每条指令的格…