首页 >> 读书频道 >> 电脑 >> 基于Socket通讯技术的chat server
 
· php和xml-
· 网站当前在线人数的实现
· SERVER PUSH的
· 第6章 结构完整的XML
· 第5章 属性、空标记和X
· 第5章 属性、空标记和X
· 第5章 属性、空标记和X
· 模板,PHPLIB处理方
· 第5章 属性、空标记和X
· 第5章 属性、空标记和X
· 模板,PHPLIB处理方
· 使用PHP的错误处理
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

基于Socket通讯技术的chat server


查看有无更新版本

关键字:PHP 2006-9-17

 

基于Socket通讯技术的chat server(c程序)

/*
Chat Server Test

program by leex(1999/12/6 4:51)
compile under redhat linux 6.0

*/
#include
#include
#include
#include
#include
#include

#define SERV_PORT 6666
#define INTERVAL 3
#define SPOOLFILE "spool.dat"

#define MAXLINE 4096
#define TALKERNAMELEN 20
#define MSGLEN 80

typedef struct{
int magic;
int msgcount;
}SPOOLFILEHEADER;

typedef struct{
char talkername[TALKERNAMELEN];
char msg[MSGLEN];
}MSGBODY;

void str_serv(int connfd,struct sockaddr_in *cliaddr);
void createspool();
void addtospool(char *talkername,char *chatmsg);

int main()
{
int listenfd,connfd;
struct sockaddr_in servaddr,cliaddr;
int clilen;
int childpid;

void sig_child();

createspool();

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,&servaddr,sizeof(servaddr));

listen(listenfd,5);

signal(SIGCLD,sig_child);

for(;;){
clilen = sizeof(cliaddr);
connfd = accept(listenfd,&cliaddr,&clilen);

if((childpid = fork()) == 0){
close(listenfd);
str_serv(connfd,&cliaddr);
exit(0);
}

close(connfd);
}
}

void str_serv(int connfd,struct sockaddr_in *cliaddr)
{
char *r200 = "HTTP/1.1 200\n";
char *header = "Content-type:text/html\n";
char *end = "\n";
char *autoscroll = "
";

char *info = "你 说:这是一条测试信息!


";

int curpos;
FILE *file;
SPOOLFILEHEADER fheader;
MSGBODY msg;
char chatmsg[MAXLINE];
int i;

curpos = 0;

addtospool((char *)inet_ntoa(cliaddr->sin_addr),"

各位朋友,大家好");

write(connfd,r200,strlen(r200));
write(connfd,header,strlen(header));
write(connfd,end,strlen(end));
write(connfd,"",6);
write(connfd,autoscroll,strlen(autoscroll));
while(1){
file = fopen(SPOOLFILE,"r");
fread(&fheader,sizeof(SPOOLFILEHEADER),1,file);
fseek(file, sizeof(SPOOLFILEHEADER)+curpos*sizeof(MSGBODY), SEEK_SET

);
for(i=0;i%s 说:%s
",

msg.talkername,msg.msg);
write(connfd,chatmsg,strlen(chatmsg));
}
fclose(file);
curpos = fheader.msgcount;


write(connfd,info,strlen(info));
sleep(INTERVAL);
}
write(connfd,"",6);
}

void sig_child()
{
int pid,stat;

while((pid = waitpid(-1,&stat,WNOHANG))>0)
addtospool("SYSOP","哈哈,某人掉线了!^_^

");
}

void createspool()
{
FILE *file;
SPOOLFILEHEADER fheader;

fheader.magic = 8888;
fheader.msgcount = 0;

file = fopen(SPOOLFILE,"w+");
fwrite(&fheader,sizeof(SPOOLFILEHEADER),1,file);
fclose(file);
}

void addtospool(char *talkername,char *chatmsg)
{
FILE *file;
SPOOLFILEHEADER fheader;
MSGBODY msg;

snprintf(msg.talkername,TALKERNAMELEN,"%s",talkername);
snprintf(msg.msg,MSGLEN,"%s",chatmsg);
file = fopen(SPOOLFILE,"a");
fwrite(&msg,sizeof(MSGBODY),1,file);
fclose(file);

file = fopen(SPOOLFILE,"r+");
fread(&fheader,sizeof(SPOOLFILEHEADER),1,file);
fheader.msgcount += 1;
fseek(file, 0L, SEEK_SET);
fwrite(&fheader,sizeof(SPOOLFILEHEADER),1,file);
fclose(file);
}

基于Socket通讯技术的chat server

[ 1 ]
基于Socket通讯技术的chat server num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑