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.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
随机推荐
- 使用maven为web工程引入jstl包时报错了
原pom文件: <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</a ...
- redis_cluster部署过程
Redis集群1.多个redis节点网络互联,数据共享2.所有的节点都是一主一从(可以是多个从),其中从不提供服务3.不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个 ...
- Vi文本编辑
vi 有3种工作模式,分别是命令行模式.插入模式.底行模式 . 命令行模式:最初进入的一般模式,该模式下可以移动光标进行浏览,整行删除,但无法编辑文字.插入模式:只有在该模式下,用户才能进行文字的编辑 ...
- Mac Angular打包报错xcode-select: error: tool 'xcodebuild' requires Xcode
Mac Angular打包报错: Error: xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer ...
- [golang note] 包和导入
package的作用 √ package是golang最基本的分发单位和工程管理中依赖关系的体现. √ 每个golang源代码文件开头都拥有一个package声明,表示该g ...
- Selenium之使用PageFactory初始化pageobject
使用PageFactory初始化pageobject有什么作用呢,下面举个例子来说明 public BaiduPage baiduPage = PageFactory.initElements(dri ...
- 网页采集利器 phpQuery
网页采集利器 phpQuery 2012-02-28 11:43:24| 分类: php|举报|字号 订阅 在网页采集的时候,通常都会用到正则表达式.但是有时候对于正则不太好的同学,比如我, ...
- CCF 炉石传说(模拟)
试题编号: 201612-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Wa ...
- Java设计模式—单例模式
Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例设计模式的类的 ...
- [转]Raanan Fattal - Image and Video Upscaling from Local Self-Examples 图像放大
转自:http://www.sigvc.org/bbs/thread-1032-1-1.html 论文链接:http://www.cs.huji.ac.il/~raananf/projects/lss ...