电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

SOCKET网络编程:Linux下实现聊天室

8页
  • 卖家[上传人]:阿**
  • 文档编号:133031036
  • 上传时间:2020-05-23
  • 文档格式:DOC
  • 文档大小:163KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、 SOCKET网络编程:Linux下实现聊天室程序介绍:本聊天室程序在Ubuntu下,采用C语言实现,结构为Client/Server结构;服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端;服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避免数据冲撞;需按以下格式调用客户端程序:client.exe 服务端主机IP 端口号(本程序设定为:3490) 用户名(在聊天室中显示的用户名)。 程序截图:/-服务端-/-客户端1:真水无香-/-客户端2:蜡笔小新-程序代码如下:/-server.c-/包含工程所需的头文件#include #include#include /数据类型定义#include#include /定义数据结构sockaddr_in#include /提供socket函数及数据结构#include#include#include#include#include#include#include#define PERM S_IRUSR|S_IWUSR #define MYPORT 3490 /宏定义定义通信端口#define BACKLOG 10

      2、 /宏定义,定义服务程序可以连接的最大客户数量#define WELCOME |-Welcome to the chat room! -| /宏定义,当客户端连接服务端时,想客户发送此欢迎字符串/转换函数,将int类型转换成char *类型void itoa(int i,char*string) int power,j; j=i; for(power=1;j=10;j/=10) power*=10; for(;power0;power/=10) *string+=0+i/power; i%=power; *string=0;/得到当前系统时间void get_cur_time(char * time_str) time_t timep; struct tm *p_curtime; char *time_tmp; time_tmp=(char *)malloc(2); memset(time_tmp,0,2); memset(time_str,0,20); time(&timep); p_curtime = localtime(&timep); strcat(time_str, ();

      3、itoa(p_curtime-tm_hour,time_tmp); strcat(time_str,time_tmp); strcat(time_str,:); itoa(p_curtime-tm_min,time_tmp); strcat(time_str,time_tmp); strcat(time_str,:); itoa(p_curtime-tm_sec,time_tmp); strcat(time_str,time_tmp); strcat(time_str,); free(time_tmp);/创建共享存储区key_t shm_create() key_t shmid; /shmid = shmget(IPC_PRIVATE,1024,PERM); if(shmid = shmget(IPC_PRIVATE,1024,PERM) = -1) fprintf(stderr,Create Share Memory Error:%sna,strerror(errno); exit(1); return shmid;/端口绑定函数,创建套接字,并绑定到指定端口int bindPor

      4、t(unsigned short int port) int sockfd; struct sockaddr_in my_addr; sockfd = socket(AF_INET,SOCK_STREAM,0);/创建基于流套接字 my_addr.sin_family = AF_INET;/IPv4协议族 my_addr.sin_port = htons(port);/端口转换 my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),0); if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr) = -1) perror(bind); exit(1); printf(bing success!n); return sockfd;int main(int argc, char *argv) int sockfd,clientfd,sin_size,recvbytes; /定义监听套接字、客户套接字 pid_t pid,ppid; /定义父子线

      5、程标记变量 char *buf, *r_addr, *w_addr, *temp, *time_str;/=0; /定义临时存储区 struct sockaddr_in their_addr; /定义地址结构 key_t shmid; shmid = shm_create(); /创建共享存储区 temp = (char *)malloc(255); time_str=(char *)malloc(20); sockfd = bindPort(MYPORT);/绑定端口 while(1) if(listen(sockfd,BACKLOG) = -1)/在指定端口上监听 perror(listen); exit(1); printf(listening.n); if(clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size) = -1)/接收客户端连接 perror(accept); exit(1); printf(accept from:%dn,inet_ntoa(their_addr.sin_addr); sen

      6、d(clientfd,WELCOME,strlen(WELCOME),0);/发送问候信息 buf = (char *)malloc(255); ppid = fork();/创建子进程 if(ppid = 0) /printf(ppid=0n); pid = fork(); /创建子进程 while(1) if(pid 0) /父进程用于接收信息 memset(buf,0,255); /printf(recvn); /sleep(1); if(recvbytes = recv(clientfd,buf,255,0) = 0) perror(recv1); close(clientfd); raise(SIGKILL); exit(1); /write bufs data to share memory w_addr = shmat(shmid, 0, 0); memset(w_addr, 0, 1024); strncpy(w_addr, buf, 1024); get_cur_time(time_str); strcat(buf,time_str); printf( %sn,buf); else if(pid = 0) /子进程用于发送信息 /scanf(%s,buf); sleep(1); r_addr = shmat(shmid, 0, 0); /printf(-%sn,r_addr); /printf(cmp:%dn,strcmp(temp,r_addr); if(strcmp(temp,r_addr) != 0) strcpy(temp,r_addr); get_cur_time(time_str); strcat(r_addr,time_str); /printf(discriptor:%dn,clientfd); /if(send(clientfd,buf,strlen(buf),0) = -1)

      《SOCKET网络编程:Linux下实现聊天室》由会员阿**分享,可在线阅读,更多相关《SOCKET网络编程:Linux下实现聊天室》请在金锄头文库上搜索。

      点击阅读更多内容
    TA的资源
  • 板材全面知识培训

    板材全面知识培训

  • CCM产品知识讲解

    CCM产品知识讲解

  • 北京市装饰公司企业名11811家

    北京市装饰公司企业名11811家

  • 2018-2019学年内蒙古乌兰察布市北京八中分校八年级(上)第一次月考数学试卷

    2018-2019学年内蒙古乌兰察布市北京八中分校八年级(上)第一次月考数学试卷

  • 2018-2019学年江苏省无锡市宜兴市环科园联盟八年级(上)第一次月考数学试卷

    2018-2019学年江苏省无锡市宜兴市环科园联盟八年级(上)第一次月考数学试卷

  • 2017-2018学年浙江省衢州市常山三中八年级(上)第一次月考数学试卷

    2017-2018学年浙江省衢州市常山三中八年级(上)第一次月考数学试卷

  • 2019-2020学年河南省郑州市桐柏一中八年级(上)第一次月考数学试卷

    2019-2020学年河南省郑州市桐柏一中八年级(上)第一次月考数学试卷

  • 2017-2018学年浙江省湖州市八年级(上)第一次月考数学试卷

    2017-2018学年浙江省湖州市八年级(上)第一次月考数学试卷

  • 2017-2018学年浙江省嘉兴市秀洲区高照实验学校八年级(上)第一次月考数学试卷

    2017-2018学年浙江省嘉兴市秀洲区高照实验学校八年级(上)第一次月考数学试卷

  • 2017-2018学年浙江省宁波市鄞州区八年级(上)第一次月考数学试卷

    2017-2018学年浙江省宁波市鄞州区八年级(上)第一次月考数学试卷

  • 2019-2020学年上海市宝山实验学校八年级(上)第一次月考数学试卷

    2019-2020学年上海市宝山实验学校八年级(上)第一次月考数学试卷

  • 2019-2020学年江苏省连云港市灌南县新知双语学校八年级(上)第一次月考数学试卷

    2019-2020学年江苏省连云港市灌南县新知双语学校八年级(上)第一次月考数学试卷

  • 2018-2019学年海南省三亚市华侨学校八年级(上)第一次月考数学试卷

    2018-2019学年海南省三亚市华侨学校八年级(上)第一次月考数学试卷

  • 2017-2018学年云南省昭通市盐津县豆沙中学八年级(上)第一次月考数学试卷

    2017-2018学年云南省昭通市盐津县豆沙中学八年级(上)第一次月考数学试卷

  • 2019-2020学年湖南省长沙市开福区青竹湖湘一外国语学校八年级(上)第一次月考数学试卷

    2019-2020学年湖南省长沙市开福区青竹湖湘一外国语学校八年级(上)第一次月考数学试卷

  • 2018-2019学年天津市南开区津英中学八年级(上)第一次月考数学试卷(10月份)

    2018-2019学年天津市南开区津英中学八年级(上)第一次月考数学试卷(10月份)

  • 2018-2019学年广东省深圳市福田区耀华实验学校八年级(上)第一次月考数学试卷

    2018-2019学年广东省深圳市福田区耀华实验学校八年级(上)第一次月考数学试卷

  • 2019-2020学年上海市闵行区上虹学校八年级(上)第一次月考数学试卷

    2019-2020学年上海市闵行区上虹学校八年级(上)第一次月考数学试卷

  • 2019-2020学年上海市浦东新区进才中学北校八年级(上)第一次月考数学试卷

    2019-2020学年上海市浦东新区进才中学北校八年级(上)第一次月考数学试卷

  • 2019-2020学年上海市复旦大学附中八年级(上)第一次月考数学试卷

    2019-2020学年上海市复旦大学附中八年级(上)第一次月考数学试卷

  • 点击查看更多
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.