基于Linux Socket的聊天室 编写

题目:聊天室

实现功能: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网络聊天室项目是一个基于Linux操作系统的聊天室应用程序。通过使用C语言编写服务器和客户端代码,可以实现多个用户之间的即时通信。该项目使用MySQL数据库来存储聊天室的相关信息,通过与数据库的交互来实现用户注册、登录、发送消息等功能。 要运行该项目,您需要先编译服务器端代码和客户端代码。编译服务器端的命令是: gcc server.c mysql.c -lmysqlclient -lpthread -o s 。 在编译完成后,您还需要在MySQL数据库中创建一个名为"chatroom"的数据库,并在其中创建一个名为"infor"的数据表。要进行此操作,您需要使用MySQL客户端工具,并执行相应的SQL语句。具体的数据库和数据表的创建可以在您的项目代码中找到。 网络聊天室项目通常包括以下几个主要功能: 1. 用户注册和登录:用户可以注册一个账号,并使用该账号登录到聊天室。 2. 消息发送和接收:用户可以向其他在线用户发送消息,并接收其他用户发送的消息。 3. 在线用户列表:显示当前在线的用户列表,以便用户选择与之进行聊天。 4. 聊天记录保存:将用户之间的聊天记录进行保存,以便后续查看。 在项目的代码中,您可以找到一些特定的函数和方法,例如print_all_data、search、Sconnect等。这些函数和方法用于与MySQL数据库进行交互,执行数据的插入、查询、删除等操作。 在项目的实现过程中,您可能还会使用到多线程编程技术,以实现多个用户的并发连接和通信。 总的来说,Linux网络聊天室项目是一个基于Linux操作系统的聊天室应用程序,通过使用C语言编写服务器和客户端代码,并结合MySQL数据库来实现用户注册、登录、发送消息等功能。您可以根据具体的需求和代码实现来进一步了解和定制该项目。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值