【LINUX SOCKET TCP 通信笔记2】教程文章相关的互联网学习教程文章

从Linux源码看Socket(TCP)的accept【代码】【图】

从Linux源码看Socket(TCP)的accept前言笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情(基于Linux 3.10内核)。一个最简单的Server端例子众所周知,一个Server端Socket的建立,需要socket、bind、listen、accept四个步骤。 今天,笔者就聚焦于accept。 代码如下:void start_server(){ // server fd ...

从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4【图】

上文中,我们基于多线程的框架,实现了注册和登录的功能,这一章,我们在此基础上来实现公聊、私聊、显示在线用户列表功能。公聊接着上几篇的流程图我们详细讲解公聊流程图如下:如上图所示,我们去掉了网络连接和客户端登录、注册等功能,直接进入聊天的流程:客户端从菜单选择公聊功能;输入要聊天信息;回车发送聊天信息;服务器的子线程收到公聊数据之后,进入公聊流程;查找所有在线用户,向所有的在线用户发送该公聊信息;客...

从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3【代码】【图】

上一篇我们已经讲了如何搭建一个多线程的服务器模型,可以支持多个客户端同时连接服务器,本篇我们来实现多个客户端,如何实现向服务器注册信息,并实现登录的功能。数据结构接着上一篇的实例代码继续增加功能。 要实现注册和登录功能,那么我们就必须要让服务器和客户端在交互数据包的时候按照统一的格式收发信令。信令格式//C/S通信的结构体struct protocol{int cmd; //命令int state; //存储命令返回信息char name[32]; //...

从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2【代码】【图】

根据 《0 基于socket和pthread实现多线程服务器模型》所述,server创建子线程的时候用的是以下代码: pconnsocke = (int *) malloc(sizeof(int));*pconnsocke = new_fd;ret = pthread_create(&tid, NULL, rec_func, (void *) pconnsocke);if (ret < 0) {perror("pthread_create err");return -1;}获取更多关于Linux的资料,请关注公众号「一口Linux」为什么必须要malloc一块内存专门存放这个新的套接字呢? 要讲清楚这个问题的原因...

从0实现基于Linux socket聊天室-多线程服务器模型-1【代码】【图】

前言Socket在实际系统程序开发当中,应用非常广泛,也非常重要。实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要。高并发服务器从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K,C10M问题的高并发服务器模型。C/S架构服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。在C/S结构中,应用程序分为两部分:服务...

Linux Socket编程(不限Linux)【代码】

1、网络中进程之间如何通信?本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC)但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网...

Linux socket下read函数详解

在socket中服务器与客户端进行通信,当其中一方调用close(即这一方会发送一个fin)关闭套接字之后,另一方read()会返回一个0。 服务器开两个进程,一个用于接收客户端发送的数据,另一个进程用于向客户端发送数据。客户端开两个进程也是一个用于发送数据一个用于接收数据。由于创建了两个进程,那么套接字的引用计数都为2,只有当客户端关闭两次套接字,在服务器的read()才会返回0。 另外,如果在虚拟机上运行,打开两个shell...

Linux内核学习-使用exec创建socket【代码】

1. cd /proc/$$/fd -> 进入当前process的fd目录 2. exec 8<> /dev/tcp/www.baidu.com/80 -> 创建socket[mengbao@minitana fd]$ ls -l total 0 lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 0 -> /dev/pts/1 lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 1 -> /dev/pts/1 lr-x------ 1 mengbao mengbao 64 Mar 7 20:21 19 -> anon_inode:inotify lrwx------ 1 mengbao mengbao 64 Mar 7 20:21 2 -> /dev/pts/1 lrwx------ 1 m...

01Linux网络编程基础 ---- 监听socket【代码】

#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <assert.h> #include <stdio.h> #include <string.h>static bool stop = false; static void handle_term( int sig ) {stop = true; }int main( int argc, char* argv[] ) {signal( SIGTERM, handle_term );if( argc <= 3 ){printf( "usage: %s ip_address port_number backlog\n"...

记一次Linux内核中socket源码走读

在熟悉TCP协议的原理后,我们知道TCP由于维护可靠性连接,其中的过程和算法是很复杂的。但是在实际开发中,一般只需要调用api提供的几个函数即可。更有甚者,现在各种框架将网络层包起来了,只留下应用层的读写调用,无疑大大降低了开发成本。 但是,我们带着疑问“究竟在Linux下是如何实现socket的?”1、原理与使用 一般而言,使用socket的接口创建一个socket,用如下构造函数。 int socket(int domain, int type, int...

Linux/Unix服务端和客户端Socket编程入门实例【代码】

前言 本章节是用基本的Linux/Unix基本函数编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一行,然后输出到客户端 客户端收到服务端的响应,输出这一行到标准输出 服务端 代码如下: #include <unistd.h> #include <sys/types.h> /* basic system data types */ #include <sys/socket.h> /* basic s...

linux c socket编程学习(1)【图】

1、相关理论: 大部分资料来自TCP/IP sockets编程(C语言实现),额外做了补充。 概念: IP: 每台主机的IP地址都是不同的。主机的IP地址有公网IP和内网IP。在局域网中,每台主机的IP都取自192.168.1.1-192.168.1.255(C类)之间,不存在两台主机的IP重复,此IP是局域网的内网IP,由用户自行分配。公网IP是访问互联网的IP,每次联机到互联网时会随机分配,互联网上的每一台主机的公网IP都不重复。内网IP通过交换机或路由器搭配主机...

简单实现一个linux下的socket server 和 client【代码】【图】

目录 1、linux文件描述符 2、在Linux下创建 socket 3、bind()函数和connect()函数 3.1、bind()函数 3.2、connect()函数 4、listen()函数和accept()函数 4.1、listen()函数 4.2、accept()函数 5、write()和read() 5.1、write()函数 5.2、read()函数 6、一个service和client的简单实现1、linux文件描述符 在linux中,一切都是文件。一个硬件设备也可以被映射为一个虚拟的文件,称为设备文件。例如,stdin 称为标准输入文件,它对应的...

linux简单Socket编程---服务器端、客户端一对一连接【图】

一、服务器端、客户端连接示意图 注:(上述图片源于传智播客linux系统编程的视频截图) 二、服务器端、客户端代码 1、服务器端代码#include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<unistd.h> #include<stdlib.h> #include<arpa/inet.h> #include<string.h> #include<ctype.h>int main(int argc,const char* argv[]) {if(argc<2){ printf("please input port number\n");return -1; } int...

linux下tcp socket编程【代码】

一、简介 直接推荐此博文: https://blog.csdn.net/weixin_44923289/article/details/106614967?utm_medium=distribute.pc_category.none-task-blog-hot-20.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-20.nonecase&request_id= https://blog.csdn.net/daaikuaichuan/article/details/83475809 二、实战: client代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errn...