c语言聊天软件
/*服务器*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define SERVPORT 5555
#define BACKLOG 10
#define MAX(a,b) ((a)>(b)?(a):(b))
void str_echo(int);
void server()
{
int sockfd,client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
socklen_t sin_size;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("socket create error!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind error!");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen error!");
exit(1);
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
{
perror("accept error!");
continue;
}
printf("received a connection from %s\n",inet_ntoa(remote_addr.sin_addr));
if(!fork())
{
close(sockfd);
str_echo(client_fd);
exit(0);
}
close(client_fd);
}
}
void str_echo(int sockfd)
{
int maxfd;
char sendbuf[1024]={0};
char recvbuf[1024]={0};
fd_set rfds;
while(1)
{
FD_SET(0,&rfds);
FD_SET(sockfd,&rfds);
maxfd=MAX(0,sockfd)+1;
select(maxfd,&rfds,NULL,NULL,NULL);
if(FD_ISSET(sockfd,&rfds))
{
bzero(recvbuf,1024);
recv(sockfd,recvbuf,1024,0);
printf("C:%s\n",recvbuf);
}
if(FD_ISSET(0,&rfds))
{
read(0,sendbuf,1024);
send(sockfd,sendbuf,strlen(sendbuf),0);
bzero(sendbuf,1024);
}
}
}
int main()
{
server();
return 0;
}
/*客户端*/
#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 5555
#define MAXSIZE 1024
#define MAX(a,b) ((a)>(b)?(a):(b))
void client(int argc,char **argv)
{
int sockfd,maxfd;
char sendbuf[MAXSIZE]={0};
char recvbuf[MAXSIZE]={0};
// struct hostent *host;
struct sockaddr_in serv_addr;
fd_set rfds;
/* if(argc<2)
{
fprintf(stderr,"Please enter the sserver's name!\n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
herror("get host by name error!\n");
exit(1);
}
*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket creat error!\n");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
// serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
bzero(&(serv_addr.sin_zero),8);
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connection error!\n");
exit(1);
}
FD_ZERO(&rfds);
while(1)
{
FD_SET(0,&rfds);
FD_SET(sockfd,&rfds);
maxfd=MAX(0,sockfd)+1;
select(maxfd,&rfds,NULL,NULL,NULL);
if(FD_ISSET(sockfd,&rfds))
{
bzero(recvbuf,MAXSIZE);
recv(sockfd,recvbuf,MAXSIZE,0);
printf("S:%s\n",recvbuf);
}
if(FD_ISSET(0,&rfds))
{
fgets(sendbuf,MAXSIZE,stdin);
send(sockfd,sendbuf,strlen(sendbuf),0);
bzero(sendbuf,MAXSIZE);
}
}
// close(sockfd);
}
int main(int argc,char **argv)
{
client(argc,argv);
return 0;
}
⑵ C语言做一个简单的聊天工具界面
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义用户名最大长度
#define P 20
//定义密码最大长度
#define Q 20
//定义用户最大数量
#define N 100
//定义用户属性的结构体
struct user
{
char user_name[P]; //用户名
char user_code[Q]; //密码
int friend_num; //好友数量
int user_friend[N]; //好友名单
};
void main()
{
int p = 0; //操作步骤
int n = 0; //用户数量
int i = 0; //过程操作数
int j = 0; //过程操作数
int log_id; //合格登陆号码
char log_name[P]; //用户名临时存储
char log_code[Q]; //密码临时存储
user my_user[N]; //定义用户
while(1)
{
switch(p)
{
case 0: //注册登陆选择界面
printf("请选择功能:\n");
printf("1.登陆\n");
printf("2.注册\n");
scanf("%d",&i); //过程数i记录接收数据
if(i ==1 || i == 2)
{
p = i;
}
else
{
printf("输入错误!\n");
p = 0;
}
i = 0; //过程数i清零
break;
case 1: //登陆界面
printf("请输入用户名:\n");
scanf("%s", &log_name);
printf("请输入密码:\n");
scanf("%s", &log_code);
for(i=0;i<n;i++) //验证登陆用户,过程数i作为循环变量
{
if(strcmp(my_user[i].user_name, log_name) == 0) //验证用户名
{
if(strcmp(my_user[i].user_code, log_code) == 0) //验证密码
{
printf("登陆成功!\n");
log_id = i; //记录合格登陆号码
p = 3;
j = 1; //过程数j作为操作步骤变化标识
}
else
{
printf("密码错误!\n");
p = 1;
j = 1;
}
}
}
i = 0; //过程数i清零
j = 0; //过程数j清零
break;
case 2: //注册界面
printf("请输入用户名:\n");
scanf("%s", &log_name);
printf("请输入密码:\n");
scanf("%s", &log_code);
strcpy(my_user[n].user_name, log_name); //保存用户名
strcpy(my_user[n].user_code, log_code); //保存密码
n++; //记录注册用户数
printf("注册成功!\n");
p = 0;
break;
case 3: //用户界面
printf("当前登陆用户:%s\n", my_user[log_id].user_name);
printf("请选择其他操作:\n");
printf("1.显示好友名单\n");
printf("2.增加好友\n");
printf("3.删除好友\n");
printf("4.好友分组\n");
printf("5.自选功能\n");
printf("6.登出\n");
scanf("%d",&i); //过程数i记录接收数据
if(i >=1 && i <= 6)
{
p = i+3;
}
else
{
printf("输入错误!\n");
p = 3;
}
i = 0; //过程数i清零
break;
case 4: //显示好友名单
printf("好友名单:\n");
for(i=0;i<my_user[log_id].friend_num;i++)
{
j = my_user[log_id].user_friend[i]; //过程数j记录用户好友号码
printf("%s\n", my_user[j].user_name);
}
p = 3;
i = 0;
j = 0;
break;
case 5: //增加好友,未实现
p = 3;
break;
case 6: //删除好友,未实现
p = 3;
break;
case 7: //好友分组,未实现
p = 3;
break;
case 8: //自选功能,未实现
p = 3;
break;
case 9: //登出
for(i=0;i<20;i++)
{
log_name[i] = 0; //清除用户名临时存储
log_code[i] = 0; //清除密码临时存储
}
p = 0; //返回初始页面
i = 0; //过程数i清零
break;
default:
p = 0;
break;
}
}
}
⑶ 请问有哪些软件是用c语言编写开发的(说具体些,谢谢)
现在我们使用的所有的聊天软件都是用C语言编发开发的,所以正常情况下,QQ聊天都是属于C语言编写
⑷ 如何用C语言编写一个简单的聊天室程序
这样:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <pthread.h>
#define MAXLINE 100;
void *threadsend(void *vargp);
void *threadrecv(void *vargp);
int main()
{
int *clientfdp;
clientfdp = (int *)malloc(sizeof(int));
*clientfdp = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
struct hostent *hp;
bzero((char *)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(15636);
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){
printf("connect error ");
exit(1);
}
pthread_t tid1,tid2;
printf("connected ");
while(1){
pthread_create(&tid1,NULL,threadsend,clientfdp);
pthread_create(&tid2,NULL,threadrecv,clientfdp);
}
return EXIT_SUCCESS;
}
void *threadsend(void * vargp)
{
//pthread_t tid2;
int connfd = *((int *)vargp);
int idata;
char temp[100];
while(1){
//printf("me: ");
fgets(temp,100,stdin);
send(connfd,temp,100,0);
printf(" client send OK ");
}
printf("client send ");
return NULL;
}
void *threadrecv(void *vargp)
{
char temp[100];
int connfd = *((int *)vargp);
while(1){
int idata = 0;
idata = recv(connfd,temp,100,0);
if(idata > 0){
printf("server : %s ",temp);
}
}
return NULL;
}
(4)c语言聊天软件扩展阅读:
注意事项
linux下编译多线程代码时,shell提示找不到 pthread_create函数,原因是 pthread.h不是linux系统默认加载的库文件,应该使用类似如下gcc命令进行编译:
gcc echoserver.c -lpthread -o echoserver
只要注意 -lpthread参数就可以了。
⑸ c语言 编写一个智能聊天工具
可以使用智能聊天机器人的接口来做
下面是一个简单的使用小耗子机器人提供的接口的聊天代码
#include<stdio.h>
#include<string.h>
#include<curl/curl.h>
#include<stdlib.h>
#defineBOT_SER"https://brisk.eu.org/smbot/sm.php"
typedefstruct
{
size_tlen;
char*msg;
}MSG;
size_tget_data(char*ptr,size_tsize,size_tnmemb,MSG*msg)
{
msg->msg=realloc(msg->msg,msg->len+nmemb+1);
snprintf(msg->msg+msg->len,nmemb,"%s",ptr);
msg->len+=nmemb;
returnnmemb;
}
intmain(intargc,char**argv)
{
CURL*curl;
MSGmsg;
charbuf[1024];
chardata[2048];
curl=curl_easy_init();
msg.len=0;
msg.msg=NULL;
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,get_data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&msg);
curl_easy_setopt(curl,CURLOPT_USERAGENT,"CBot/FromBai");
while(1)
{
printf(">");
scanf("%s",buf);
if(strcmp(buf,"exit")==0)
break;
snprintf(data,sizeof(data),"%s?msg=%s",BOT_SER,buf);
curl_easy_setopt(curl,CURLOPT_URL,data);
curl_easy_perform(curl);
if(msg.len)
{
printf("%s ",msg.msg);
msg.len=0;
free(msg.msg);
msg.msg=NULL;
}
}
curl_easy_cleanup(curl);
return0;
}