當前位置:首頁 » 編程語言 » c語言聊天工具

c語言聊天工具

發布時間: 2022-05-28 00:45:47

⑴ 聊天工具中,採用c語言編寫客戶端為什麼要用多個線程

第一、如果有界面那麼界面的線程要和計算的線程要沖突(界面卡頓)。
第二、多人聊天時,多人發送的消息會在資源上佔用上阻塞了。(不能並行)

⑵ 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語言開發一個簡單的區域網聊天軟體

linux系統都是C寫的
用C當然行得通
就是個socket編程
我們原來做過一個的原理描述
當然
這個是C\S模式的
其實你可以做成
無服務端的
本系統具有區域網聊天功能。採用了C\S模式(即伺服器創建套接字後,轉換為監聽套接字,一直在監聽是否由客戶端的請求。伺服器接收到相應的請求後,進行相應的處理)。採用了TCP/IP(面向連接)協議。運用了SOCKET套接字實現了很方便的訪問TCP/IP協議。多線程的操作。
伺服器的程序(簡述):
創建socket-->bind()-->listen()-->accept()-->recv/send()-->close();
客戶端的程序(簡述):
創建scoket-->發送connect-->recv/send()-->close();

⑷ 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;
}

⑸ linux下用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語言做個類似QQ的聊天工具

由於qq是騰訊私有通信協議未公開。所以無法跟騰訊對通。
自己如果只是編一個相互通信的工具沒必要。因為開源世界裡有許多開源軟體,都有源代碼給你看。
樓主如果只是學習簡單的建立一個交流工具學習編程。可以學習socket網路編程。上面都有包裝好了工具函數。編個簡單的一個伺服器端,一個客戶端。然後幾個客戶端可以相互聊聊

⑺ 怎麼用C語言實現聊天工具中,兩個客戶端之間的通信呢

UDP連接,

分別建立socket,發送到對方電腦的特定埠上。

⑻ 用C語言寫一個簡單聊天軟體!謝謝

聽了樓上的我都不敢說Windows程序設計中的SDK用的也是c語言了

傳的是《C語言高級編程及實例剖析》中的第六章的源碼,用的是SDK編程,裡面拉了控制項和用了多線程

樓主如果需要界面比較復雜的聊天室程序,用MFC當然方便點,但用SDK也沒有太大的問題(原理是一樣的,學哪一種,另一種就會了)。後者的教程貌似很難找。可以看看MFC的,比較好的是 《Vc++ 打造區域網聊天室》(視頻)

兩種資料在網上都找得到...

補充:當然,如果需要傳文件,圖片那些,就需要研究研究網路協議了,也只是添加些功能而已

⑼ 如何用C語言編寫一個區域網的聊天工具

http://wenku..com/link?url=--mbfxAWFelNOvCNnxOY3tloTTuJ6h-WXp3WD_8eWo4HGtHpE6SbOB6Yyh0CPw_qepM-O_
仔細看一看

⑽ 如何用c語言編寫QQ聊天程序(源代碼)

1、首先,我們編寫C語言的頭文件#include <stdio.h>。

熱點內容
c語言數字翻譯 發布:2025-02-12 14:45:54 瀏覽:497
暗區突圍為什麼顯示伺服器維修 發布:2025-02-12 14:45:53 瀏覽:247
翻譯分為匯編和編譯 發布:2025-02-12 14:29:12 瀏覽:233
什麼是新聞編譯 發布:2025-02-12 14:23:12 瀏覽:853
如何查看手機存儲 發布:2025-02-12 14:21:15 瀏覽:50
cacti自定義腳本 發布:2025-02-12 14:21:13 瀏覽:313
編譯安卓步驟 發布:2025-02-12 14:19:39 瀏覽:222
php把數組分組 發布:2025-02-12 14:19:37 瀏覽:280
linux部署weblogic 發布:2025-02-12 14:18:58 瀏覽:504
cs文件編譯python 發布:2025-02-12 14:02:39 瀏覽:531