如何用c语言编写QQ聊天程序(源代码)

如何用c语言编写QQ聊天程序(源代码),第1张

1、首先,我们编配哗樱写C语言的头文件#include <stdio.h>。

2、然后我们编写Main函数框架。

3、接下来我们定义两个变量,如下图所示。

4、然后我们编写输入的函数,如下图所示培丛。

5、接下来在输入后,我们编写输出程序。

6、这时候,我们便可以观察最终芦哗结果。

这样:

#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\n")

      exit(1)

}

pthread_t tid1,tid2

printf("connected\n")

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: \n ")

fgets(temp,100,stdin)

send(connfd,temp,100,0)

printf("   友链       client send OK\n")

}

printf("client send\n")

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 :\n%s\n",temp)

}

}

return NULL

}

扩展资料:

注意事项

linux下编译多线程代码时,shell提示找键告蠢不到 pthread_create函数,原因是 pthread.h不是linux系统默认加载的库文件,应该使用类似如下gcc命令进行编译稿陪:

gcc echoserver.c -lpthread -o echoserver

只要注意 -lpthread参数就可以了。

#include<stdio.h>#include<stdlib.h>

#include<string.h>

#include<sys/types.h>

#include<errno.h>

#include<netinet/in.h>

#include<sys/socket.h>

#define SERVERPORT 5555#define BACKLOG 10

#define MAXLEN 1024

int main(){

int sockfd,client_fd

int sin_size = 0

int recvlen = 0

char recvbuf[MAXLEN]={0}

struct sockaddr_in my_addr

struct sockaddr_in cli_addr

int iRet

/*建立socke通信*/

if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){

printf("Create socket error\n\n")

exit(1)

}

printf("socket success\n")

my_addr.sin_family=AF_INET my_addr.sin_port=htons(SERVERPORT)

my_addr.sin_addr.s_addr=INADDR_ANY

memset(my_addr.sin_zero,0,8)

/*绑定socket端口*/

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1){

printf("岩族bind error\n")

close(sockfd)

exit(1)

}

printf("bind success\n")

/*监听端口*/

if(listen(sockfd,BACKLOG) == -1){

printf("listen error\n!")

close(sockfd)

exit(1)

}

printf("listren success\n")

while(1) {

sin_size = sizeof(struct sockaddr_in)

/*阻塞等待客户端发送消息*/

if((client_fd=accept(sockfd,(struct sockaddr *)&cli_addr,&sin_size)) == -1)

{

printf("accept error !"大宽)

continue

}

printf("accept success\n")

printf("receive a connection form %s\n",inet_ntoa(cli_addr.sin_addr))

/*fork进粗仿弊程,子进程处理接收的信息*/

iRet=fork()

if(iRet <0)

{

printf(" fork err, pid=[%d]", getpid())

}

/*fork返回0,为子进程*/

else if(iRet == 0)

{

printf("pid=[%d]", getpid())

printf("子进程\n")

memset(recvbuf,0,sizeof(recvbuf))

/*接收客户端发送的内容*/

if((recvlen = recv(client_fd,recvbuf,MAXLEN,0)) == -1)

{

printf("recv error\n")

close(client_fd)

exit(1)

}

printf("recvlen[%d]\n",recvlen)

printf("recvmsg:\n%s\n",recvbuf)

/*向客户端发送内容*/ if(send(client_fd,recvbuf,recvlen,0) == -1)

{

printf("send error\n")

close(client_fd)

exit(1)

}

printf("sendmsg:\n%s\n",recvbuf)

close(client_fd)

exit(0)

}

/*父进程,返回子进程pid*/

else

{

printf("pid=[%d]", getpid())

printf("父进程\n")

continue

}

}

close(sockfd)

exit(0)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12513394.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存