linux socket实现网络聊天室(一):服务器和客户端对话
来源:互联网 发布:mysql教程 编辑:程序博客网 时间:2024/05/18 03:52
1.服务器端#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netinet/in.h>#define SERVPORT 3333#define BACKLOG 10#define MAX_CONNECTED_NO 10#define MAXDATASIZE 5int main(){struct sockaddr_in server_sockaddr,client_sockaddr;int sin_size,recvbytes;int sockfd,client_fd;char buf[MAXDATASIZE];/*创建socket*/if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}printf("socket success!,sockfd=%d\n",sockfd);/*设置服务器sockaddr_in结构*/server_sockaddr.sin_family=AF_INET;server_sockaddr.sin_port=htons(SERVPORT);server_sockaddr.sin_addr.s_addr=INADDR_ANY;bzero(&(server_sockaddr.sin_zero),8);/*绑定socket和端口*/if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){perror("bind");exit(1);}printf("bind success!\n");/*监听客户端请求*/if(listen(sockfd,BACKLOG)==-1){perror("listen");exit(1);}printf("listening....\n");/*接受客户端请求*/if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){perror("accept");exit(1);}/*接收客户端信息*/if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){perror("recv");exit(1);} printf("received a connection :%s\n",buf);/*关闭socket*/close(sockfd);}2.客户端#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define SERVPORT 3333#define MAXDATASIZE 100main(int argc,char *argv[]){int sockfd,sendbytes;char buf[MAXDATASIZE];struct hostent *host;struct sockaddr_in serv_addr;/*argc<2,表示没有输入主机名,主机句是IP地址形式,如“192.168.1.1”*/if(argc < 2){fprintf(stderr,"Please enter the server's hostname!\n");exit(1);}/*获取主机名,地址解析函数*/if((host=gethostbyname(argv[1]))==NULL){perror("gethostbyname");exit(1);}/*创建socket*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}/*设置serv_addr结构参数*/serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(SERVPORT);serv_addr.sin_addr=*((struct in_addr *)host->h_addr);bzero(&(serv_addr.sin_zero),8);/*向服务器请求连接,serv_addr是服务器端地址*/if(connect(sockfd,(struct sockaddr *)&serv_addr,\sizeof(struct sockaddr))==-1){perror("connect");exit(1);}/*发送消息给服务器,此时可以在服务器端看到"hello"字样*/if((sendbytes=send(sockfd,"hello",5,0))==-1){perror("send");exit(1);}/*关闭连接*/close(sockfd);}
二、编译步骤
#gcc server.c -o server#./server //此时服务器端在监听#gcc client.c -o client#./client 172.31.100.236 //客户端向服务器端发送“hello",服务器端监听终止
- linux socket实现网络聊天室(一):服务器和客户端对话
- linux socket实现网络聊天室(一):服务器和客户端对话
- linux socket实现网络聊天室(一):服务器和客户端对话
- Linux 下基于socket的简单网络聊天室(服务器与客户端)
- Socket通信之客户端和服务器对话
- SOCKET网络编程:Linux下实现聊天室
- Socket实现单客户端与服务器对话功能
- java网络编程----------Socket实现客户端和服务器的连接
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- 基于Linux C 用socket和线程 实现的简易聊天室之客户端
- linux socket 编程一:简单的服务器和客户端通信
- Linux下网络socket编程——实现服务器(select)与多个客户端通信
- 网络编程(5)—— 基于Linux系统的UDP协议socket服务器和客户端
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- C# 异步TCP Socket聊天室(1服务器,N客户端)
- Socket编程(简易聊天室客户端/服务器编写、CocoaAsyncSocket)
- android网络编程 -- Socket 通信(03) 点对点Android聊天室实现(带服务器) [附源码分析]
- 基于Linux c 用socket和线程 实现的简易聊天室之服务器
- 关于学习C++和编程的50个观点
- ubuntu安裝中文輸入法
- 30 很棒的 jQuery Mobile 教程
- 按Volume Down进Factory Mode的修改:
- ABAP--关于重复行的处理
- linux socket实现网络聊天室(一):服务器和客户端对话
- 新开通的博客,请大家多多光顾!!
- 关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)
- 10个经典的字符串hash函数的C代码实现
- fs2410 linux-2.6.35内核移植中的RTC问题--drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
- PHP - 利用Curl、socket、file_get_contents POST数据
- CADOCommand错误“ORA-01008:并非所有变量都已绑定”的解决方案
- Java流与文件操作
- Google雇佣Google+源代码发掘者Florian Rohrweck