终于抽时间学习了linux的网络编程,以前只是对socket有个字面上的了解,具体的机制和用法一无所知。正好项目要用,学习下,做个笔记。
在linux上,任何都可以当做文件来对待。获得一个文件描述符,就可以对它进行读写操作。socket也是一样。
socket在linux下被翻译成套接字,我觉得这个翻译真的很烂,第一次接触的人不可能知道套接字是个什么东西。翻译成插座反而直观明了,更容易理解。
socket是为c/s模型设计的,也就是客户--服务器模型。解决了进程间通信的问题。
下面主要说的面向连接的socket,无连接的socket就不讲了。
简单的将,服务端起一个socket,监听一个端口,等待客户端的连接,然后客户端起一个socket,指向服务端的ip地址,端口号,向服务器发起连接请求。连接成功后就可以发送信息。看一下简单的流程
前面讲了socket可以当做一个文件来读写。那么读写文件一般都是要获得一个文件描述符,socket通信要获得一个socket描述符,也可以理解为特殊的文件描述符,叫法不同而已。
通过socket函数获得socket描述符
int socket(int domain , int type , int protocol);
这个函数返回一个int型的值,就是socket描述符。如果发生错误则返回-1。
domain确定通信域,包括地址格式。通常被设为AF_INET代表IPv4因特网。
type确定socket类型,是无连接还是有链接的。
protocol通常设为0,表示按给定的域和socket类型选择默认协议。比如domain为AF_INET,type为SCOK_STREAM时,默认协议就是TCP。
bind()函数绑定端口。声明如下
int bind (int sockfd , const struct sockaddr *my_addr , int addrlen) ;
其中,sockfd就是socket函数返回的socket描述符;my_addr是一个指向struck sockaddr的指针,包含地址信息:名称、端口和ip地址。
addrlen一般设为sizeof(struct sockaddr);
connect()函数连接服务器地址,声明如下:
int connect (int sockfd, const struct sockaddr *serv_addr, int addrlen);
返回一个int型的值,连接成功返回0,出错则返回-1;
参数sockfd还是socket描述符,此时是请求连接的socket。
serv_addr就是服务器地址。
listen函数
这个函数用来监听端口是否有请求,然后可以使用accept()来处理请求。声明:
int listen(int sockfd, int backlog);
sockfd跟前面一样,是socket描述符,backlog是未处理的请求队列可容纳最大数目。
accept()函数
int accept(int sockfd, void *addr, int *addrlen);
返回一个int值,这个int值是一个新的socket描述符,代表这个连接。此时有两个socket描述符,返回的这个就是和远程计算机的连接,而一开始的那个socket描述符仍然在指定的端口上进行监听。此时返回的这个socket描述符就可以进行读写了。
参数sockfd是在监听的socket描述符。
addr是一个struct sockaddr_in结构的指针,存储远程计算机的信息,如端口号和ip地址
发生错误返回-1.
面向连接的程序中,服务器执行如下函数:
调用socket()函数创建一个socket。
调用bind()函数把自己绑定在一个地址上。
调用listen()函数监听连接。
调用accept()函数处理请求。
调用send()和recv()来发送和接受消息
客户端执行下面的函数:
调用socket()函数创建一个socket。
调用connect()函数连接到服务器的网络地址上。
调用send()和recv()函数来发送和接收消息。
不传代码了,代码是改的别人的demo。
分享到:
相关推荐
本文档为本人在学习linux编程的学习笔记,记载了socket基础知识,makefile和GDB调试,收获不少。
为了方便读者学习,《Linux网络编程》最后一个部分介绍了3个综合案例,包括应用层的Web服务器例子、简单的应用层网络协议站例子和内核层网防火墙的例子。, 《Linux网络编程》适合广大的Linux平台下的网络程序设计...
命令 netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的 选项 我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使用帮 助手册获得详细的情况. telnet telnet是一...
linux网络编程 pdf # Linux网络编程基础 Linux网络编程是指在Linux操作系统上开发网络应用程序的过程。它主要涉及到TCP/UDP协议以及select/poll/epoll等多路复用技术。 TCP/UDP协议是网络通信的基础,其中TCP协议...
如何学习Linux网络编程如何学习Linux网络编程如何学习Linux网络编程
进程间的通信,通信协议简介,Berkeley套接字,Linux下C语言使用和调试等等
③linux网络编程学习:tcp编程、udp编程(socket套接字编程); ④linux-shell编程学习; 资源几乎包含了博主的整个linux学习的资料,是根据网络课程、网络资料、自写程序、书籍资料等渠道收集整理的,希望对大家有所...
【ChinaByte 教程】如果你想迚入 LINUX 神奇的网络编程世界,请跟我来,在学习乊前,我只需要你 拥有一定的C 语言编程知识,就足够了。我会讱述编写网络程序需要的基本知识。好,今天,让我们 一起来看看,网络编程...
linux网络编程, 适合初学者学习网络编程 ,在linux环境下
<<linux网络编程>>的大部分源代码,供大家学习使用,可在ubuntu上运行,本人运行环境:vmware15下的ubuntu14,如有侵权请联系作者删除
本人为本人学习linux应用编程和网络编程时整理的文档,大家根据需求下载。
Linux网络编程 网络学习 精简pdf
一本书的ppt,舍不得买书的人可以看看。linux网络编程学习非常实用的资料。
Linux网络编程-网络基础-socket编程-高并发服务器,非常详细的资料,值得你学习。
快速学习,使用网络编程。 Linux网络编程(快速学习掌握网络编程)
Linux系统的一个主要特点是他的网络功能非常强大。随着网络的日益普及,基于网络的应用也将越来越多,在这个网络时代,掌握了Linux的网络编程技术(中文)。适合初学者使用。
Linux网络编程 入门级的教程很好 非常值得学习
linux 网络编程 epoll 简单示例 服务端 只为学习用 有不妥之处欢迎指正