论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言编写一个局域网聊天的程序

文章类别:C语言程序设计 | 发表日期:2011-3-19 9:32:03

包含两个程序,一个server 端,一个client端,那个c闲人在的话让他给我留言 
//server.cpp 
#include<stdio.h> 
#include<winsock2.h> 
#include<string.h> 
#include<conio.h> 
SOCKET server; 
SOCKET client; 
WSADATA WSAData; 
int WSAreturn; 
sockaddr_in local; 
sockaddr_in from; 
int fromlen = sizeof(from); 
char information[50]; 
char welcome[]="欢迎您登陆YYJW主机!\n"; 
char receive[256]; 
char ip[]="您的IP是:"; 
char chat[256]; 
char c; 
int i=0; 
bool cansend=false; 
int GetIp() 
{ 
WSAreturn = WSAStartup(0x101,&WSAData); 
if(WSAreturn) 
{ 
printf("发生一个未知错误!\n"); 
return 0; 
} 
local.sin_family = AF_INET; 
local.sin_addr.s_addr = INADDR_ANY; 
local.sin_port = htons((u_short)23); 
server = socket(AF_INET,SOCK_STREAM,0); 
if(server==INVALID_SOCKET ) 
{ 
printf("无法创建套接字!\n"); 
return 0; 
} 
if(bind(server,(sockaddr *)&local,sizeof(local))!=0) 
{ 
printf("无法绑定套接字!\n"); 
return 0; 
} 
if(listen(server,5)!=0) 
{ 
printf("无法监听端口!\n"); 
return 0; 
} 
while(true) 
{ 
printf("正在等待用户连接...\n"); 
client = accept(server,(struct sockaddr *)&from,&fromlen); 
strcpy(information,inet_ntoa(from.sin_addr)); 
strcat(welcome,information); 
    printf("接受来自%s的连接...\n",inet_ntoa(from.sin_addr)); 
printf("正在发送欢迎消息...\n"); 
send(client,welcome,strlen(welcome),0); 
//send(client,ip,strlen(ip),0); 
//send(client,information,strlen(information),0); 
printf("欢迎消息信息已经成功发送至客户端!\n"); 
while(1) 
{ 
if(!cansend) 
{ 

printf("正在等待对方发来消息...\n"); 
cansend=false; 
recv(client,receive,sizeof(receive),0); 

printf("*********接受到的消息***********\n"); 
printf("%s\n",receive); 

printf("**************结束**************\n"); 
cansend=true; 
} 
else 
{ 

printf("请输入下一条消息:"); 
scanf("%s\0",&chat); 
     
send(client,chat,strlen(chat),0); 
printf("\n已经成功发送出信息!\n"); 
cansend=false; 
} 
} 

closesocket(client); 


} 
closesocket(server); 
WSACleanup(); 
return 1; 
} 
void main() 
{ 
int ok; 

ok = GetIp(); 
if(ok==0) 
printf("无法完成请求!\n"); 
getch(); 

} //client.cpp 
#include<stdio.h> 
#include<winsock2.h> 
#include<string.h> 
#include<conio.h> 
SOCKET client; 
WSADATA WSAData; 
int WSAreturn; 
sockaddr_in to; 
char information[256]; 
char welcome[]="我已经登陆到你的主机!\n"; 
char receive[256]; 
char chatto[256]; 
char servername[256]; 
char chatfrom[256]; 
char c; 
long result; 
bool cansend=true; 
int connection() 
{ 
WSAreturn = WSAStartup(0x101,&WSAData); 
if(WSAreturn) 
{ 
printf("发生一个未知错误!\n"); 
return 0; 
} 

client = socket(AF_INET,SOCK_STREAM,0); 
 to.sin_family = AF_INET; 
to.sin_port = htons(23); 

while(true) 
{ 
printf("请输入要登陆的IP:"); 
scanf("%s",&servername); 

 to.sin_addr.s_addr = inet_addr(servername); 

printf("正在连接...\n"); 
result = connect(client,(struct sockaddr *)&to,sizeof(to)); 
if(SOCKET_ERROR==result) 
 
// 连接失败  
printf("对不起,无法连接到目标主机!\n"); 
WSACleanup();  
return 0;  
} 

else 
{ 

cansend=false; 
 recv(client,receive,sizeof(receive),0); 
 printf("*******欢迎消息消息*******\n"); 
 printf("%s\n",receive); 
 printf("***********结束*********\n"); 
cansend=true; 
while(1) 
{ 

if(cansend) 
{ 

printf("请输入下一条信息:"); 
scanf("%s\0",&chatto); 

send(client,chatto,strlen(chatto),0); 
printf("\n已经成功发送信息!\n"); 
cansend=false; 
} 
else 
{ 

printf("正在等待对方发来消息...\n"); 
cansend=false; 
recv(client,chatfrom,sizeof(chatfrom),0); 

printf("*******接收到的消息*******\n"); 
printf("%s\n",chatfrom); 
printf("***********结束*********\n"); 
cansend=true; 
} 


} 

} 


} 
closesocket(client); 
WSACleanup(); 
return 1; 
} 
void main() 
{ 
connection(); 
getch(); 
}>>local.sin_port = htons((u_short)23); 
端口 23 一般保留给 telnet 用的,最好 1024 以下的端口都不要用, 
unix 系统会要求 root 才能绑定的 (当然 Windows 不会有这个要求)。 
建议用户可自己设置端口。以前用Winsock在VB下做过类似的东西, 
在群发送时每一次sent都要Do event,刚开始不懂,每次只给最后一人发送成功。 
真好的回忆... ...

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058