TCP打开文件传输(服务器端并发code)
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <unistd.h>
#define MAXLINE 4096
void str_echo(int sockfd) {
ssize_t n;
char buff[MAXLINE];
printf("----echo----\n");
while((n = read(sockfd, buff, MAXLINE)) > 0) {
if(write(sockfd, buff, strlen(buff)) != strlen(buff)) {
printf("write error\n");
exit(-1);
}
}
}
int main() {
int listenfd, connfd;
socklen_t clilen;
pid_t pid;
struct sockaddr_in servaddr, cliaddr;
char buff[MAXLINE];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if(listenfd < 0) {
printf("socket error\n");
exit(-1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8000);
if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
printf("bind error");
exit(-1);
}
if(listen(listenfd, 1024) < 0) {
printf("listen error");
exit(-1);
}
printf("----server is listening----\n");
for(;;) {
clilen = sizeof(cliaddr);
if((connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen)) < 0) {
printf("accept error");
exit(-1);
}
printf("ip: %s, port: %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)), ntohs(cliaddr.sin_port));
printf("----------connected-------\n");
if((pid = fork()) < 0) {
printf("fork error\n");
exit(-1);
}
else if(pid == 0) { /* child */
printf("---child pid = %ld process---\n", (long)getpid());
if(close(listenfd) < 0) {
printf("---child close listenfd error---\n");
exit(-1);
}
str_echo(connfd);
if(close(connfd) < 0) {
printf("---child close connfd error---\n");
exit(-1);
}
exit(0);
}
else { /* parent */
if(close(connfd) < 0) {
printf("---parent close connfd error---\n");
exit(-1);
}
}
}
exit(0);
}
从这些代码中可以体会到客户/服务器网络应用所需的所有基本步骤。
TCP打开文件传输(服务器端并发code)的更多相关文章
- TCP打开文件传输(客户端code)
#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <sys/types. ...
- java实现两台电脑间TCP协议文件传输
记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路. 注:本文参考自<黑马程序员>视频. 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书, ...
- SSH-Secure-Shell 3.2.9 build283版本,创建直接打开文件传输的快捷方式的方法
2019-12-31 16:21:23 版本信息: 在安装目录下新建快捷方式 目标填写:"D:\SSH-Secure-Shell\SshClient.exe" /f 图标选择,系统 ...
- 通过TCP实现文件传输
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.In ...
- QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)
引言 TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯.控制器可以设置 ...
- Linux网络编程:UDP实现可靠的文件传输
我们知道,用TCP实现文件传输很简单.相对于TCP,因为UDP是面向无连接.不可靠的传输协议,所以我们需要考虑丢包和后发先至(包的顺序)的问题,所以我们想要实现UDP传输文件,则需要解决这两个问题.方 ...
- Go网络文件传输
流程分析 借助TCP完成文件的传输,基本思路如下: 发送方(客户端)向服务端发送文件名,服务端保存该文件名. 接收方(服务端)向客户端返回一个消息ok,确认文件名保存成功. 发送方(客户端)收到消息后 ...
- helm-mode打开文件支持中文搜索
helm-mode打开文件支持中文搜索 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #83949 ...
- TCP协议,UDP,以及TCP通信服务器的文件传输
TCP通信过程 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求,然后客户端主动关闭连接.两条 ...
随机推荐
- [Windows Server 2012] 安装护卫神·主机管理系统
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装护卫神·主 ...
- bat配置JDK环境变量
最近总是部署服务器,总是要安装配置JDK,今天就想写个bat来配置JDK的环境变量,首先介绍点bat的小知识 @符号后面的命令不会显示在terminal上 例如: @echo运行时 隐藏命令(不在te ...
- 使用GetMirror一次镜像多个实体
public static void GetMirror(this ObjectIdCollection ids, Point3d p1, Point3d p2, bool s, params Ent ...
- lsof command not found 解决
有些centos 没有 lsof命令,需要安装 yum install lsof -y 使用: lsof -i:端口号
- 几个加固云服务器的方法(VPS版)
前不久我的月供hide.me账号终于永远沉睡了,平时也就不过去油管看些养猫视频也能被盯上--迫于学业和娱乐的重担(),我决定搭建一个VPS来解决这种麻烦. 方法:自行选购VPS咯,不管是土豪去买AWS ...
- [CodeForces] CF226D The table
Harry Potter has a difficult homework. Given a rectangular table, consisting of n × m cells. Each ce ...
- Dijkstra算法模板
自己对Dijstra算法的理解是: 首先输入保存点,边的权值(注意无向图和有向图在保存时的区别). 将表示从起点st到顶点 i 的距离的d[ i ]数组的每一个值初始化为INF,令d[st] = 0. ...
- Scrapy实战:使用scrapy再再次爬取干货集中营的妹子图片
需要学习的知识: 1.获取到的json数据如何处理 2.保存到json文件 3.保存到MongoDB数据库 4.下载项目图片(含缩略图) 1.创建项目 scrapy startproject gank ...
- 啥是SQL?
SQL:(Structured Query Language)是结构化查询语言缩写.是一门专门与数据库管理系统打交道的语言. SQL语言:是关系型数据库的标准语言,,其主要用于存取数据,查询数据,更新 ...
- 渗透实战(周二):FLUXION暴力破解WIFI登录口令
Wi-Fi攻与防 假设我们Kali Linux 攻击机有一个无线网卡,想通过特殊手段连入名称:414的Wi-Fi网络,那以下便是特殊手段的具体过程. Wi-Fi的破解 硬件:MacBook Pro.小 ...