Linux下Socket网络编程之点对点聊天室
1. 系统设计的目的与意义
掌握信号与信号处理的概念,了解点对点聊天室的设计需求,掌握相关的理论知识,切实掌握程序设计的分析方法,勇于实践,多参考开源项目和代码。实现点对点聊天室程序设计,Linux网络程序设计在服务器领域、嵌入式领域有着广泛的应用。
2. 系统开发环境
(1)VMware Workstation 7.0
(2)Red Hat Enterprise Linux 5
(3)硬件:每人一台计算机并能够连入局域网
(4) 软件:Windows xp/7 c语言
3. 使用的相关技术
Linux系统下使用C语音进行编程
(1)Linux它是一个类UNIX内核的可以自由发布的实现版本,一个操作系统的底层核心。完整的Linux系统=内核+外围工具,可以获得内核源代码,编译并安装,然后获得并安装许多其他自由发布的软件,从而创建一个完整的Linux,通常称为Linux系统。
缺点:操作困难、工具软件和开发软件版本太多,不易选择。
优点:开放性的、多用户多任务的系统,具有出色的稳定性、速度性能、可靠的系统安全性,提供了丰富的网络功能、良好的用户界面,标准兼容性和可移植性。
(2)C语音是一种计算机程设计序语言,它既有高级语言的特点又有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖于计算机硬件的应用程序。
(3)C/S(Client/Server)或客户端/服务器结构模式:建立在局域网的基础上。客户机响应速度快但只应用于局域网,客户需要安装专用的客户端软件但应用程序的升级和客户端程序的维护相对困难。
二、需求分析
1.点对点聊天室系统示意图
2.系统的基本功能
(1)服务器:
• 接受客户端发送过来的数据并显示
• 接受键盘输入的数据,并发送给客户端
• 客户端关闭,服务器端的进程也将全部退出。
(2)客户端:
• 接受服务器发送过来的数据并显示
• 接受键盘输入的数据,并发送给服务器
• 服务器关闭,客户端的进程也将全部退出。
三、概要设计
1.socket函数
• 包含头文件<sys/socket.h>
• 功能:创建一个套接字用于通信
• 原型
– int socket(int domain, int type, int protocol);
• 参数
– domain :指定通信协议族(protocol family)
– type:指定socket类型,流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字SOCK_RAW
– protocol :协议类型
• 返回值:成功返回非负整数, 它与文件描述符类似,我们把它称为套接口描述字,简称套接字。失败返回-1
2.bind函数
• 包含头文件<sys/socket.h>
• 功能:绑定一个本地地址到套接字
• 原型
- int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
• 参数
– sockfd:socket函数返回的套接字
– addr:要绑定的地址
– addrlen:地址长度
• 返回值:成功返回0,失败返回-1
3.listen函数
• 包含头文件<sys/socket.h>
• 功能:将套接字用于监听进入的连接
• 原型
- int listen(int sockfd, int backlog);
• 参数
– sockfd:socket函数返回的套接字
– backlog:规定内核为此套接字排队的最大连接个数
• 返回值:成功返回0,失败返回-1
4.accept函数
• 包含头文件<sys/socket.h>
• 功能:从已完成连接队列返回第一个连接,如果已完成连接队列为空,则阻塞。
• 原型
-int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
• 参数
– sockfd:服务器套接字
– addr:将返回对等方的套接字地址
– addrlen:返回对等方的套接字地址长度
• 返回值:成功返回非负整数,失败返回-1
5.connect函数
• 包含头文件<sys/socket.h>
• 功能:建立一个连接至addr所指定的套接字
• 原型
-int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
• 参数
– sockfd:未连接套接字
– addr:要连接的套接字地址
– addrlen:第二个参数addr长度
• 返回值:成功返回0,失败返回-1
6.write函数
• 包含头文件<unistd.h>
• 功能:向文件输出数据
• 原型
-ssize_t write(int fd,const void *buf,size_t nbytes)
• 参数
– fd:数据传输对象的文件描述符
– addr:保存要传输数据的缓冲地址值
– addrlen:要传输数据的字节数
• 返回值:成功返回写入的字节数,失败返回-1
7.read函数
• 包含头文件<unistd.h>
• 功能:用来接收数据
• 原型
-ssize-t read(int fd,void *buf,size_t nbytes);
• 参数
– fd:显示数据接收对象的文件描述符
– buf:要保存接收数据的缓冲地址值
– nbytes:要接收数据的最大字节数
• 返回值:成功返回接收的字节数,失败返回-1
8.close函数
• 包含头文件<unistd.h>
• 功能: 关闭文件或套接字
• 原型
-int close(int fd);
• 参数
– fd:需要关闭的文件或套接字的文件描述符
• 返回值:成功返回0,失败返回-1
9.fgets函数
• 包含头文件<stdio.h>
• 功能: 从文件流中读取一行或指定个数的字符
• 原型
-char *fgets(char *string,int size,FILE *stream);
• 参数
– string:字符数组,用来保存读取到的字符
– size:要读取的字符的个数,如果该行字符数大于size-1,则读到size-1个字符时结束,并在最后补充‘\0’;如果该行字符数小于等于size-1,则读取所有字符,并在最后补充‘\0’。
– stream :文件流指针
• 返回值:读取成功,返回读到的字符串,即string;失败返回NULL。
10.fputs函数
• 包含头文件<stdio.h>
• 功能:将指定的字符串写入到文件流中
• 原型
-int fputs(char *string,FILE *stream);
• 参数
– string:为将要写入的字符串
– stream:文件流指针
• 返回值:成功返回非负数,失败返回EOF
11.handler函数
• 包含头文件<stdio.h>
• 功能:特定事件发生时,操作系统向进程发送信息
• 原型
-void handler(int sig)
• 返回值:参数类型为int型,返回void型函数
12.signal函数
• 包含头文件<signal.h>
• 功能:获取系统产生各种信号并对此信号调用用户自己定义
• 原型
-void (* signal(int signo,void (*func)(int)))(int)
• 参数
– 第一个参数:指定信号的值
– 第二个参数:一个函数指针,用于指定针对信号的处理函数的函数内存空间地址
• 返回值:参数类型为int型,返回void型函数指针
13.fork函数
• 包含头文件<unistd.h>
• 功能:把Linux 变换为多任务系统的基础
• 原型
-pid_t fork(void)
• 返回值:成功时返回进程ID,失败时返回-1
14.kill函数
• 包含头文件<signal.h>
• 功能:发送指定的信号到相应进程
• 原型
-int kill(pid_t,int sig)
• 参数
– pid_t:参数进程标识号
– sig:进程号要传递信号值
• 返回值:成功返回0,失败返回-1
四、结果
Linux下Socket网络编程之点对点聊天室相关推荐
- Linux下Socket网络编程
什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程, ...
- Linux下Socket网络编程send和recv使用注意事项
1.send函数 ssize_t send( SOCKET s, const char *buf, size_t len, int flags ); (1)send先比较待发送数据的长度len和套接字 ...
- 基于Linux的socket网络编程项目——游侠手机商城
基于Linux的socket网络编程项目--游侠手机商城 一.项目说明 二.项目使用的技术 三.客户端搭建 四.服务器端搭建 一.项目说明 本项目是一个仿真手机商城类系统,基本功能: 登录界面功能:用 ...
- 【Linux】socket网络编程之服务器与客户端的数据交互
[Linux]socket网络编程之服务器与客户端的数据交互 前言参考 argc !=2是什么意思 inet pton函数 对stdin,stdout 和STDOUT_FILENO,STDIN_FIL ...
- Linux下TCP网络编程-创建服务器与客户端
一.前言 互联网概念诞生于20世纪60年代末,从9几年中国接入互联网开始到现在,生活的每个角落都能看到网络的使用.现在物联网时代.共享经济的到来,生活中不仅仅电脑.手机可以接入网络,身边的各个设备也能 ...
- Windows/Linux TCP Socket网络编程简介及测试代码
典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...
- linux下c网络编程实现串口与网口的信息透传_串口网口数据透传程序
comtcp简介 comtcp程序实现linux平台下串口网口数据转发功能,将串口与网口数据透明转发,应用该程序可以用网络TCP访问串口设备; #include#include#include#inc ...
- Linux下Socket TCP编程
一.新手入门 1.socket即为套接字,在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一的标识网络通讯中的一个进程,"IP地址+TCP或UDP端口号&quo ...
- Java网络编程——多人聊天室
多用户即时通信系统 需求分析: 1.用户登录 2.拉取在线用户列表 3.无异常退出 4.私聊 5.群聊 6.发送文件 7.服务器推送新闻 多用户登录 老韩的课程讲的真的很清楚: 关于Java多线程的文 ...
最新文章
- html流动模型,javascript的事件流模型都有什么?
- Myeclipse破解总结
- linux ifconfig 命令详解
- Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源码
- 第1节 连通性强连通、割点和桥(一)
- SP2中修复IE浏览器的一些技巧
- 摄像头又换位置了!最新iPhone XI 渲染图曝光
- 三种方式实现web站点安全
- Hyperledger Fabric blockchain explorer 重启
- 3dmax:3dmax三维VR渲染设置(VR间接照明GI栏、【VR间接(全局)照明】发光贴图、光子贴图、BF算法、灯光贴图、灯光缓存)之详细攻略(切记收藏!)
- 一个简短的指南的iOS越狱及原因
- 单元格下拉全选快捷键_excel下拉全选快捷键是什么
- HTTP协议响应头之Transfer-Encoding:分块传输详解
- acl 影响因子_计算机领域EI和SCI收录期刊及影响因子
- 什么是tomcat?tomcat是干什么用的?
- 15136-34-2,Cyclo(Leu-Trp),c(Leu-Trp),cyclo-L-Trp-L-Leu
- 狂神——通过EasyExcel来操作Excel
- 信号调理方式(放大、滤波、隔离、调制解调等)
- Mybatis错误——Could not find resource com/kuang/dao/UserMapper.xml
- Eclipse部署多个Web项目内存溢出,java.lang.OutOfMemoryError: PermGen space
热门文章
- 基于scrapy下的租房信息爬取与数据展示工具的设计与实现
- UI设计中个人页面设计攻略
- 智能指针(shared_ptr、unique_ptr、weak_ptr)的使用
- [AcWing], 蒙德里安的梦想
- Unity WebView 插件⭐️(十三)特定模块 iOS网页视图—iOSWebViewWebView
- [LightOJ1017]Brush (III)(dp)
- 当部分地区电信运营商劫持页面,如何识别及解决
- ActiveX控件打包cab时INF文件的编写[转]
- TemplateInputException:template might not exist or might not be accessible
- Exploit编写教程2:跳转的多种姿势