c语言的tcp和udp客户端和服务器
都是最简单的用来记忆。
this is my 的git地址:https://github.com/yanjinyun/cLanguageTcpUdp
tcp最简单的服务器:
int main(int argc, const char *argv[])
{
int listenfd, acceptfd;
struct sockaddr_in sin, cin;
socklen_t clen;
char buf[]; signal(SIGCHLD, SIG_IGN); listenfd = socket(PF_INET, SOCK_STREAM, ); sin.sin_family = PF_INET;
sin.sin_port = htons(atoi(argv[]));
sin.sin_addr.s_addr = inet_addr(argv[]);
bind(listenfd, (struct sockaddr *)&sin, sizeof(sin)); listen(listenfd, ); while()
{
clen = sizeof(cin);
printf("listen ......\n");
acceptfd = accept(listenfd, (struct sockaddr *)&cin, &clen);
printf("client %s %d connect\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port)); if(fork() == )
{
close(listenfd); while()
{
bzero(buf, sizeof(buf));
if(recv(acceptfd, buf, sizeof(buf), ) == )
{
printf("client %s %d exit\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));
exit();
}
printf("recv(%s %d): %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);
}
} close(acceptfd);
} return ;
}
tcp最简单的客户端:
int main(int argc, const char *argv[])
{
int cfd = socket(PF_INET, SOCK_STREAM, );
struct sockaddr_in cin;
char buf[]; cin.sin_family = PF_INET;
cin.sin_port = htons(atoi(argv[]));
cin.sin_addr.s_addr = inet_addr(argv[]);
connect(cfd, (struct sockaddr *)&cin, sizeof(cin)); printf("connect ip(%s) port(%s) server ok\n", argv[], argv[]); if(fork() == )
{
while()
{
bzero(buf, sizeof(buf));
recv(cfd, buf, sizeof(buf), );
printf("recv: %s\n", buf);
}
} while()
{
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf)-] = '\0';
send(cfd, buf, strlen(buf)+, );
} return ;
}
udp的最简单的服务器:
int main(int argc, const char *argv[])
{
int sfd;
struct sockaddr_in sin, cin;
char buf1[1024], buf2[1024], buf3[1024];
socklen_t clen; sfd = socket(PF_INET, SOCK_DGRAM, 0); sin.sin_family = PF_INET;
sin.sin_port = htons(atoi(argv[2]));
sin.sin_addr.s_addr = inet_addr(argv[1]);
bind(sfd, (struct sockaddr *)&sin, sizeof(sin)); if(fork() == 0)
{
while(1)
{
clen = sizeof(cin);
bzero(buf1, sizeof(buf1));
recvfrom(sfd, buf1, sizeof(buf1), 0, (struct sockaddr *)&cin, &clen);
printf("recvfrom: %s %d %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf1);
}
} while(1)
{
fscanf(stdin, "%s%s%s", buf1, buf2, buf3);
cin.sin_family = PF_INET;
cin.sin_port = htons(atoi(buf2));
cin.sin_addr.s_addr = inet_addr(buf1);
sendto(sfd, buf3, strlen(buf3)+1, 0, (struct sockaddr *)&cin, sizeof(cin));
} return 0;
}
udp最简单的客户端:
int main(int argc, const char *argv[])
{
int sfd;
struct sockaddr_in cin;
char buf1[1024], buf2[1024], buf3[1024];
socklen_t clen; sfd = socket(PF_INET, SOCK_DGRAM, 0); if(fork() == 0)
{
while(1)
{
clen = sizeof(cin);
bzero(buf1, sizeof(buf1));
recvfrom(sfd, buf1, sizeof(buf1), 0, (struct sockaddr *)&cin, &clen);
printf("recvfrom: %s %d %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf1);
}
} while(1)
{
fscanf(stdin, "%s%s%s", buf1, buf2, buf3);
cin.sin_family = PF_INET;
cin.sin_port = htons(atoi(buf2));
cin.sin_addr.s_addr = inet_addr(buf1);
sendto(sfd, buf3, strlen(buf3)+1, 0, (struct sockaddr *)&cin, sizeof(cin));
} return 0;
}
ftp最简单的服务器器:
#define N 256 void list(int connectfd)
{
DIR *dir;
struct dirent *d;
char buf[N]; if((dir=opendir((const char *)get_current_dir_name())) == NULL)
{
perror("opendir");
exit(1);
}
while((d=readdir(dir)) != NULL)
{
if(d->d_name[0] == '.')
{
continue;
}
strcpy(buf, d->d_name);
send(connectfd, buf, N, 0);
} closedir(dir);
} void get(int connectfd, char *filename)
{
char buf[N];
FILE *fp;
int n; if((fp=fopen(filename, "r")) == NULL)
{
strcpy(buf, "no");
send(connectfd, buf, sizeof(buf), 0);
} strcpy(buf, "yes");
send(connectfd, buf, sizeof(buf), 0); while((n=fread(buf, 1, sizeof(buf), fp)) > 0)
{
send(connectfd, buf, n, 0);
} fclose(fp);
} void put(int connectfd, char *filename)
{
char buf[N];
FILE *fp;
int n; if((fp=fopen(filename, "r")) == NULL)
{
strcpy(buf, "no");
send(connectfd, buf, sizeof(buf), 0);
fp = fopen(filename, "w");
while((n=recv(connectfd, buf, sizeof(buf), 0)) > 0)
{
fwrite(buf, 1, n, fp);
}
fclose(fp); return;
} strcpy(buf, "yes");
send(connectfd, buf, sizeof(buf), 0);
} int main(int argc, const char *argv[])
{
FILE *fp;
int n, listenfd, connectfd, i;
struct sockaddr_in s, c;
struct servent *sport;
socklen_t clen;
char *linep = NULL, buf[N], *arg[32]; signal(SIGCHLD, SIG_IGN); if((fp=fopen("/etc/ftp.conf", "r")) == NULL)
{
perror("fopen");
exit(1);
} if(getline(&linep, &n, fp) == -1)
{
perror("getline");
exit(0);
}
linep[strlen(linep)-1] = '\0';
chdir(linep); if((sport=getservbyname("myftp", "tcp")) == NULL)
{
perror("getservbyname");
exit(1);
} #ifdef DEBUG
printf("%d %s\n", n, linep);
#endif if((listenfd=socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
} s.sin_family = PF_INET;
s.sin_port = sport->s_port;
s.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listenfd, (struct sockaddr *)&s, sizeof(s)) == -1)
{
perror("bind");
exit(1);
} listen(listenfd, 5); while(1)
{
clen = sizeof(c);
if((connectfd=accept(listenfd, (struct sockaddr *)&c, &clen)) == -1)
{
perror("accept");
exit(1);
} if(fork() == 0)
{
close(listenfd); recv(connectfd, buf, sizeof(buf), 0); arg[0] = strtok(buf, " ");
for(i=1; arg[i-1]!=NULL; i++)
{
arg[i]=strtok(NULL, " ");
} if(strcmp(arg[0], "list") == 0)
{
list(connectfd);
} if(strcmp(arg[0], "get") == 0)
{
get(connectfd, arg[1]);
} if(strcmp(arg[0], "put") == 0)
{
put(connectfd, arg[1]);
} close(connectfd);
exit(0);
} close(connectfd);
}
}
ftp最简单的客户端器:
#define N 256 void list(int connectfd)
{
DIR *dir;
struct dirent *d;
char buf[N]; if((dir=opendir((const char *)get_current_dir_name())) == NULL)
{
perror("opendir");
exit(1);
}
while((d=readdir(dir)) != NULL)
{
if(d->d_name[0] == '.')
{
continue;
}
strcpy(buf, d->d_name);
send(connectfd, buf, N, 0);
} closedir(dir);
} void get(int connectfd, char *filename)
{
char buf[N];
FILE *fp;
int n; if((fp=fopen(filename, "r")) == NULL)
{
strcpy(buf, "no");
send(connectfd, buf, sizeof(buf), 0);
} strcpy(buf, "yes");
send(connectfd, buf, sizeof(buf), 0); while((n=fread(buf, 1, sizeof(buf), fp)) > 0)
{
send(connectfd, buf, n, 0);
} fclose(fp);
} void put(int connectfd, char *filename)
{
char buf[N];
FILE *fp;
int n; if((fp=fopen(filename, "r")) == NULL)
{
strcpy(buf, "no");
send(connectfd, buf, sizeof(buf), 0);
fp = fopen(filename, "w");
while((n=recv(connectfd, buf, sizeof(buf), 0)) > 0)
{
fwrite(buf, 1, n, fp);
}
fclose(fp); return;
} strcpy(buf, "yes");
send(connectfd, buf, sizeof(buf), 0);
} int main(int argc, const char *argv[])
{
FILE *fp;
int n, listenfd, connectfd, i;
struct sockaddr_in s, c;
struct servent *sport;
socklen_t clen;
char *linep = NULL, buf[N], *arg[32]; signal(SIGCHLD, SIG_IGN); if((fp=fopen("/etc/ftp.conf", "r")) == NULL)
{
perror("fopen");
exit(1);
} if(getline(&linep, &n, fp) == -1)
{
perror("getline");
exit(0);
}
linep[strlen(linep)-1] = '\0';
chdir(linep); if((sport=getservbyname("myftp", "tcp")) == NULL)
{
perror("getservbyname");
exit(1);
} #ifdef DEBUG
printf("%d %s\n", n, linep);
#endif if((listenfd=socket(PF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
} s.sin_family = PF_INET;
s.sin_port = sport->s_port;
s.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listenfd, (struct sockaddr *)&s, sizeof(s)) == -1)
{
perror("bind");
exit(1);
} listen(listenfd, 5); while(1)
{
clen = sizeof(c);
if((connectfd=accept(listenfd, (struct sockaddr *)&c, &clen)) == -1)
{
perror("accept");
exit(1);
} if(fork() == 0)
{
close(listenfd); recv(connectfd, buf, sizeof(buf), 0); arg[0] = strtok(buf, " ");
for(i=1; arg[i-1]!=NULL; i++)
{
arg[i]=strtok(NULL, " ");
} if(strcmp(arg[0], "list") == 0)
{
list(connectfd);
} if(strcmp(arg[0], "get") == 0)
{
get(connectfd, arg[1]);
} if(strcmp(arg[0], "put") == 0)
{
put(connectfd, arg[1]);
} close(connectfd);
exit(0);
} close(connectfd);
}
}
c语言的tcp和udp客户端和服务器的更多相关文章
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- UNIX网络编程——使用select函数的TCP和UDP回射服务器程序
服务器程序: #include <sys/wait.h> #include <string.h> #include <string.h> #include < ...
- C语言Socket-模拟远程CMD(客户端向服务器发送命令,服务器执行该命令)
服务端(server) #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.li ...
- TCP/UDP客户端
Python 网络编程----模块socekt 在渗透测试的过程中,经常会遇到需要创建一个TCP客户端来连接服务器.发送垃圾数据.进行模糊测试活进行其他任务的情况. 简单的TCP客户端代码: #!/u ...
- LwIP应用开发笔记之三:LwIP无操作系统UDP客户端
前一节我们实现了基于RAW API的UDP服务器,在接下来,我们进一步利用RAW API实现UDP客户端. 1.UDP协议简述 UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包 ...
- Windows下C语言的Socket编程例子(TCP和UDP)
原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
随机推荐
- 009-Hadoop Hive sql语法详解4-DQL 操作:数据查询SQL-select、join、union、udtf
一.基本的Select 操作 语法SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE whe ...
- macOS 上安装 PECL
一.简介 PECL(The PHP Extension Community Library)是 PHP 扩展的存储库,为 PHP 所有的扩展提供提供托管和下载服务. 通过 PEAR(PHP Exten ...
- python手写神经网络实现识别手写数字
写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...
- Guid ToString 格式知多少?
在日常编程中,Guid是比较常用的,最常见的使用就是如下所示: string id = Guid.NewGuid().ToString(); 这条语句会生成一个新的Guid并转成字符串,如下: // ...
- 读取Android设备的MAC地址
读取Android设备的MAC地址 AndroidUtil.java package com.csdn.android.util; import com.csdn.android.framewor ...
- Element 中表单非必填数据项 必须为数字的验证问题
Element-ui 的el-form组建中,自带基本的验证功能,比如某些项必填的验证,直接加入rules 规则中即可,如下实例: 在页面中书写如下: <el-form-item label=& ...
- 【JXL】导出Excel
基本设置 // File file = new File("d:\\writetest.xlsx");// WritableWorkbook wwb = Workbook.crea ...
- Python的幂运算
直接用例子说明
- 【Python】错误、调试和测试
链接到错误处理 链接到调试 链接到单元测试 链接到文档测试 [错误处理] 小结:遇到错误怎么办? 1.不理它. 2.捕获它,再抛出. 3.捕获并处理错误. raise 不懂如何处理错误就直接抛出(ra ...
- 20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程. ...