当前位置:网站首页>socket编程一:使用fork()实现最基础的并发模式
socket编程一:使用fork()实现最基础的并发模式
2022-07-27 05:19:00 【Mr FF】
tcp_server.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
// create socket
int socketServerListen = socket(AF_INET, SOCK_STREAM, 0);
if (socketServerListen < 0) {
perror("socket");
exit(1);
}
struct sockaddr_in serverAddr;
bzero(&serverAddr, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
// atoi, 不使用atoi会导致connection refused.
serverAddr.sin_port = htons(atoi(argv[2]));
serverAddr.sin_addr.s_addr = inet_addr(argv[1]);
// bind, notice: it use the standard struct: sockaddr, not sockaddr_in
if (bind(socketServerListen, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr)) < 0) {
perror("bind");
exit(2);
}
// listen
if (listen(socketServerListen, 30) < 0) {
perror("listen");
exit(3);
}
struct sockaddr_in clientAddr;
bzero(&clientAddr, sizeof(clientAddr));
int connFd;
// Invalid argument, if not initialized.
// 如果不初始化,在accept中会直接报: Invalid argument.
socklen_t clientAddrLen = 0;
while (1) {
// accpet was different with bind, the parameters 3 was socklen_t*, but not socklen_t.
if (connFd = accept(socketServerListen, (struct sockaddr*)&clientAddr, &clientAddrLen) < 0) {
perror("accept");
continue;
}
printf("tcp_server: client addr is:%s, client port is:%d\n",
inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));
pid_t pid = fork();
if (pid < 0) { // error
perror("fork");
} else if (pid == 0) { // child
// in child, it should close the socketServerListen, keep the connFd.
close(socketServerListen);
char buf[1024] = {0};
ssize_t len = 0;
// read the data from the connFd
while (len = read(connFd, buf, 1024) > 0) {
printf("read the data:%s\n", buf);
//write(connFd, buf, len);
}
} else {
// in father, it should close the connFd, just keep the socketServerListen
close(connFd);
}
}
return 0;
}tcp_client.c
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
// socket
int clientSockFd = socket(AF_INET, SOCK_STREAM, 0);
if (clientSockFd < 0) {
perror("clientSockFd");
exit(1);
}
struct sockaddr_in serverAddr;
bzero(&serverAddr, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
// atoi, if not use this ,connect will fail.
serverAddr.sin_port = htons(atoi(argv[2]));
// use inet_addr to transfer the address
serverAddr.sin_addr.s_addr = inet_addr(argv[1]);
//serverAddr.sin_addr.s_addr = htons(INADDR_ANY);
// connect
if (connect(clientSockFd, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr)) < 0) {
perror("connect");
exit(2);
}
// get the data from standard input. (keyboard)
char buf[1024] = {0};
while (1) {
read(0, buf, 1024);
write(clientSockFd, buf, 1024);
fflush(0);
}
return 0;
}边栏推荐
- 关于pytorch反向传播的思考
- 为什么交叉熵损失可以用于刻画损失
- 5.索引和切片
- GBASE 8C——SQL参考6 sql语法(3)
- GBASE 8C——SQL参考6 sql语法(11)
- Day 9. Graduate survey: A love–hurt relationship
- Performance optimization of common ADB commands
- Day 3. Suicidal ideation and behavior in institutions of higher learning: A latent class analysis
- pytorch模型
- 关于pytorch转onnx经常出现的问题
猜你喜欢

DSGAN退化网络

15.GPU加速、minist测试实战和visdom可视化

面试常问Future、FutureTask和CompletableFuture

16.过拟合欠拟合

视觉横向课题bug1:FileNotFoundError: Could not find module ‘MvCameraControl.dll‘ (or one of it

3.分类问题---手写数字识别初体验

1. Introduction to pytorch

17.动量与学习率的衰减

18. Convolutional neural network

Emoji Emoji for text emotion analysis -improving sentimental analysis accuracy with Emoji embedding
随机推荐
数字图像处理——第三章 灰度变换与空间滤波
Day14. Using interpretable machine learning method to distinguish intestinal tuberculosis and Crohn's disease
12.优化问题实战
dpdk 网络协议栈 vpp OvS DDos SDN NFV 虚拟化 高性能专家之路
pytorch中交叉熵损失函数的细节
贪心高性能神经网络与AI芯片应用研修
Emoji表情符号用于文本情感分析-Improving sentiment analysis accuracy with emoji embedding
GBASE 8C——SQL参考6 sql语法(2)
子类调用父类构造函数的时机
【MVC架构】MVC模型
Day 2. Depressive symptoms, post-traumatic stress symptoms and suicide risk among graduate students
Day 4.Social Data Sentiment Analysis: Detection of Adolescent Depression Signals
8. Mathematical operation and attribute statistics
【mysql学习】8
pytorch使用data_prefetcher提升数据读取速度
GBASE 8C——SQL参考6 sql语法(10)
Day14. 用可解释机器学习方法鉴别肠结核和克罗恩病
Speech and Language Processing (3rd ed. draft) Chapter 2 ——正则表达式,文本归一化,编辑距离 阅读笔记
Day 9. Graduate survey: A love–hurt relationship
Gbase 8C - SQL reference 6 SQL syntax (3)