基于Linux Socket的聊天室 编写
来源:互联网 发布:红蜘蛛控制软件破解版 编辑:程序博客网 时间:2024/06/11 06:13
题目:聊天室
实现功能:1.用户注册
2.密码登录
3.单对单聊天
实现方式:socket fork实现
5.31:1 实现多进程发送接收
用户注册登录待实现。
服务器端
server.c
/*
*
Time:
programmer:
version:
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
#define WELCOME "Welcome to Chat Room"
int main(void)
{
struct sockaddr_in servaddr, cliaddr ;
socklen_t cliaddr_len ;
int listenfd,connfd ;
char buf[MAXLINE] ;
char str[INET_ADDRSTRLEN] ;
int i ,n ;
int npid ;
struct user {
char name[20];
char gender[10];
int age;
int IDnum;
char msg[MAXLINE];
} ;
//user inforamtion
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr)) ;
servaddr.sin_family = AF_INET ;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT) ;
bind(listenfd, (struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,20) ;
printf("Accepting connections ..\n");
while(1){
cliaddr_len = sizeof(cliaddr) ;
if( (connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len)) < 0){
printf("accept error !\n");
}
npid = fork();
if(npid < 0){
printf("call to fork error! \n");
}
else if(npid == 0){
close(listenfd);
while(1){
n = read(connfd,buf,MAXLINE);
if(n == 0){
printf("the other side has been closed !");
break ;
}
printf("received from %s at PORT %d\n",inet_ntop(AF_INET,&cliaddr.sin_addr,str,sizeof(str)),ntohs(cliaddr.sin_port));
//send to client message for regsiter information inclde name
write(connfd,WELCOME,sizeof(WELCOME));
//write(STDOUT_FILENO, buf, sizeof(buf));
printf("%s",buf);
write(connfd,buf,n) ;
}
}
else
close(connfd) ;
}
}
/*
printf("the read number is %d\n",n);
while(1){
n=read(connfd,buf,MAXLINE);
if(n == 0){
printf("the other side has been closed \n");
break ;
}
for(i = 0; i <n ;i++)
buf[i] = toupper(buf[i]);
write(connfd,buf,n) ;
write(STDOUT_FILENO,buf,n);
}
close(connfd);//处理一次就关闭了连接
*/
//客户端代码
client.c
/* client.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char *argv[])
{
struct sockaddr_in servaddr ;
char buf[MAXLINE] ;
int sockfd,n ;
//char *str ;
/*
if(argc != 2){
fputs("usage;./client message \n",stderr);
exit(1);
}
*/
//str = argv[1] ;
sockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET ;
inet_pton(AF_INET,"127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT);
if( (connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) ) < 0)
printf("Connection abnormals!\n");
while(fgets(buf, MAXLINE, stdin) != NULL){
write(sockfd,buf,strlen(buf));
n = read(sockfd,buf, MAXLINE);
if(n == 0){
printf("the other side have been closed");
}
else{
write(STDOUT_FILENO, buf, n);
}
}
close(sockfd);
//write(sockfd,str,strlen(str));
//n = read(sockfd,buf,MAXLINE);
//printf("Response from server : %s\n",buf);
//write(STDOUT_FILENO, buf, n);
//??
//close(sockfd);
return 0 ;
}
- 基于Linux Socket的聊天室 编写
- 基于Socket的聊天室
- JAVA 基于TCP协议编写的Socket聊天室程序
- 编写基于PHP的聊天室
- 基于socket的聊天室服务器端
- Android 基于Socket的聊天室
- 基于Socket通信的聊天室
- android 基于socket的聊天室
- Android 基于Socket的聊天室
- Android 基于Socket的聊天室
- Android 基于Socket的聊天室
- 基于UDP的socket聊天室
- 基于Socket的聊天室源程序
- 基于Socket的Android聊天室
- 基于Socket的网络聊天室
- 基于Socket的多线程聊天室
- Linux 下基于socket的简单网络聊天室
- Linux下基于socket和多线程的聊天室小程序
- ubuntu常见问题配置
- 第十二周项目一实现复数类中的运算符重载(1)
- Context相关
- 案例分析10
- 灰度图像阈值化分割常见方法总结及VC实现
- 基于Linux Socket的聊天室 编写
- 第九周项目:程序阅读 类和指针
- 第11周项目1-点-圆-圆柱类族的设计 (3)
- 随机森林算法
- 杨绛写给年轻人的100句话
- s5pv210 datasheet_system_audio_etc
- CSS样式表初始化代码
- SQL 语句大全
- 第13周-项目2-动物这样叫(1)