C语言网络编程实现聊天功能(c语言聊天程序代码)
跪求大神指点网络编程聊天程序(用c语言实现,在ubuntu终端中运行),要求:
cdsn上面应该有相关的程序,还可能会有代码,你可以去那看看。
如何用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\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参数就可以了。
c语言 编写一个智能聊天工具
可以使用智能聊天机器人的接口来做
下面是一个简单的使用小耗子机器人提供的接口的聊天代码
#include?stdio.h
#include?string.h
#include?curl/curl.h
#include?stdlib.h
#define?BOT_SER?""
typedef?struct
{
????size_t?len;
????char?*msg;
}MSG;
size_t?get_data(char?*ptr,size_t?size,size_t?nmemb,MSG?*msg)
{
????msg-msg=realloc(msg-msg,msg-len+nmemb+1);
????snprintf(msg-msg+msg-len,nmemb,"%s",ptr);
????msg-len+=nmemb;
????return?nmemb;
}
int?main(int?argc,char?**argv)
{
????CURL?*curl;
????MSG?msg;
????char?buf[1024];
????char?data[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/From?Baidu?zhidao");
????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\n",msg.msg);
????????????msg.len=0;
????????????free(msg.msg);
????????????msg.msg=NULL;
????????}
????}
????curl_easy_cleanup(curl);
????return?0;
}
求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,
你上面给出的代码其实就是?MSDN?里面的演示代码,不过不完整,只演示了两个函数的使用,我给你看看我写的?TCP?通讯程序,可以在同一个局域网内的两台不同计算机之间聊天?:
这其实就是某本将网络通讯的教程里面的例子,不过是我自己重写了一遍,下面给你代码:
========================
下面是公共代码:
========================
#ifndef?__CINITSOCK__H__
#define?__CINITSOCK__H__
#include?winsock2.h
#include?iphlpapi.h
#pragma?comment(?lib,?"ws2_32.lib"?)
#pragma?comment(?lib,?"iphlpapi.lib"?)
class?CInitSock
{
public:
CInitSock(?int?nMinorVer?=?2,?int?nMajorVer?=?2?)
{
?WSADATA?wsData;
?WORD?wVer?=?MAKEWORD(?nMinorVer,?nMajorVer?);
?if(?0?!=?WSAStartup(?wVer,?wsData?)?)?exit(?0?);
}
~CInitSock(?)
{
?WSACleanup(?);
}
};
#endif
========================
下面是客户端的代码?:
=======================
#include?"CInitSock.h"
#include?iostream
using?namespace?std;
CInitSock?g_Sock;
void?main(?)
{
SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);
if(?INVALID_SOCKET?==?sockClient?)
return;
sockaddr_in?sockAddr;
sockAddr.sin_family?=?AF_INET;
sockAddr.sin_port?=?htons(?4567?);
sockAddr.sin_addr.S_un.S_addr?=?inet_addr(?"127.0.0.1"?);
if(?-1?==?connect(?sockClient,?(?sockaddr*?)sockAddr,?sizeof(?sockAddr?)?)?)
{
cout??"connect?failed"??endl;
return;
}
while(?true?)
{
char?szBuf[?MAX_PATH?];
ZeroMemory(?szBuf,?sizeof(?szBuf?)?);
cout??"You?Say?:?";
cin??szBuf;
if(?SOCKET_ERROR? ==?send(?sockClient,?szBuf,?MAX_PATH,?0?)?)
{
?cout??"send?failed"??endl;
?return;
}
int?nRecvLen?=?recv(?sockClient,?szBuf,?MAX_PATH,?0?);
if(?nRecvLen??0?)
{
?//?szBuf[?nRecvLen?]?=?'\0';
?cout??"Service?Say?:?"??szBuf??endl??endl;
}
else
{
?cout??"recv?failed"??endl;
?return;
}
}
closesocket(?sockClient?);
}
======================
下面是服务端的代码:
======================
#include?"CInitSock.h"
#include?iostream
using?namespace?std;
CInitSock?g_Sock;
void?main(?)
{
SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);
if(?INVALID_SOCKET?==?sockClient?)
return;
sockaddr_in?sockAddr;
sockAddr.sin_family?=?AF_INET;
sockAddr.sin_port?=?htons(?4567?);
sockAddr.sin_addr.S_un.S_addr?=?INADDR_ANY;
bind(?sockClient,?(?sockaddr*?)sockAddr,?sizeof(?sockAddr?)?);
listen(?sockClient,?SOMAXCONN?);
char?szBuf[?MAX_PATH?];
sockaddr_in?remoteAddr;
int?nLen?=?sizeof(?sockaddr_in?);
SOCKET?sock?=?accept(?sockClient,?(?sockaddr*?)remoteAddr,?nLen?);
while(?true?)
{
int?nRecvLen?=?recv(?sock,?szBuf,?MAX_PATH,?0?);
if(?nRecvLen??0?)
{
?cout??"Client?Say?:?"??szBuf??endl??endl;
}
ZeroMemory(?szBuf,?sizeof(?szBuf?)?);
cout??"You?Say?:?";
cin??szBuf;
if(?SOCKET_ERROR?==?send(?sock,?szBuf,?MAX_PATH,?0?)?)
{
?cout??"send?failed"??endl;
}
}
closesocket(?sock?);
closesocket(?sockClient?);
}
希望能够帮到楼主?。
用C语言实现聊天室需要什么技术
实现聊天室涉及到通讯技术,网络技术,P2P技术,保密技术,用户交互界面技术等等。通讯技术方面要实现音视频语音对话的功能,用户交互界面需要根据用户的功能的需求和使用体验,制作出体验良好的界面。
每种技术都需要花费大量的时间精力学习。例如,在C语言里面,通讯技术里一般使用套接字Socket来实现。套接字是支持TCP/IP网络通信的基本操作单元。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。