C语言编写的仿QQ局域网通讯程序
更新时间:2023-11-11 01:41:01 阅读量: 教育文库 文档下载
// 系统添加网络连接的头文件引用及一些消息类型的宏定义:
#include
#pragma comment(lib,\
#define CLIENTSEND_EXIT 1 #define CLIENTSEND_TRAN 2 #define CLIENTSEND_LIST 3
#define SERVERSEND_SELFID 1 #define SERVERSEND_NEWUSR 2 #define SERVERSEND_SHOWMSG 3 #define SERVERSEND_ONLINE 4
FILE *ioutfileServer; FILE *ioutfileClient;
struct CReceivePackage {
int iType; int iToID; int IFromID;
char cBuffer[1024]; };
struct CSendPackage {
int iType; int iCurConn;
char cBuffer[1024]; };
struct CUserSocketInfo {
int ID;
char cDstIP[64]; int iPort;
SOCKET sUserSocket; };
struct CUser {
int ID;
char cDstIP[64]; };
struct CUser usr[20]; int bSend=0; int iMyself; int iNew=0;
struct CUserSocketInfo usrinfo[20];
//退出函数
void ExitSystem() {
if(ioutfileServer!=NULL) fclose(ioutfileServer); if(ioutfileClient!=NULL) fclose(ioutfileClient); WSACleanup(); exit(0); }
//服务器端接收消息的线程
DWORD WINAPI threadproServer(LPVOID pParam) {
SOCKET hsock=(SOCKET)pParam; char cRecvBuffer[1024]; char cShowBuffer[1024]; int num=0;
if(hsock!=INVALID_SOCKET) printf(\while(1) {
num=recv(hsock,cRecvBuffer,1024,0); if(num>=0) {
cRecvBuffer[num]='\\0';
sprintf(cShowBuffer,\printf(\
fwrite(cShowBuffer,sizeof(char),strlen(cShowBuffer),ioutfileServer); fflush(ioutfileServer);
if(strcmp(\{
ExitSystem(); }
} }
return 0; }
//检查IP
int CheckIP(char *cIP) {
char IPAddress[128]; char IPNumber[4]; int iSubIP=0; int iDot=0; int iResult=0; int iIPResult=1; int i;
memset(IPNumber,0,4);
strncpy(IPAddress,cIP,128); for(i=0;i<128;i++) {
if(IPAddress[i]=='.') {
iDot++; iSubIP=0;
if(atoi(IPNumber)>255) iIPResult=0;
memset(IPNumber,0,4);
} else {
IPNumber[iSubIP++]=IPAddress[i]; }
if(iDot==3 && iIPResult!=0) iResult=1; }
return iResult; }
//创建点对点服务端
void CreateServer() {
SOCKET m_SockServer;
struct sockaddr_in serveraddr;
struct sockaddr_in serveraddrfrom;
int iPort=4600; int iBindResult=-1; int iWhileCount=200;
struct hostent* localHost; char* localIP;
SOCKET m_Server;
char cWelcomBuffer[]=\int len=sizeof(struct sockaddr); int iWhileListenCount=10;
DWORD nThreadId=0; int ires;
char cSendBuffer[1024]; char cShowBuffer[1024];
ioutfileServer=fopen(\
m_SockServer=socket(AF_INET,SOCK_STREAM, 0); printf(\本机绑定的端口号(大于1024):\scanf(\
localHost=gethostbyname(\
localIP=inet_ntoa(*(struct in_addr *)*localHost->h_addr_list);
serveraddr.sin_family=AF_INET; serveraddr.sin_port=htons(iPort);
serveraddr.sin_addr.S_un.S_addr=inet_addr(localIP);
iBindResult=bind(m_SockServer,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr));
while(iBindResult!=0 && iWhileCount>0) {
printf(\绑定失败,重新输入:\scanf(\
serveraddr.sin_family=AF_INET; serveraddr.sin_port=htons(iPort);
serveraddr.sin_addr.S_un.S_addr=inet_addr(localIP);
iBindResult=bind(m_SockServer,(struct sockaddr*)&serveraddr,sizeof(struct
sockaddr)); iWhileCount--; if(iWhileCount<=0) {
printf(\端口绑定失败,重新运行程序\\n\exit(0); } }
while(iWhileListenCount>0) {
printf(\listen(m_SockServer,0);
m_Server=accept(m_SockServer,(struct sockaddr*)&serveraddrfrom,&len); if(m_Server!=INVALID_SOCKET) {
send(m_Server,cWelcomBuffer,sizeof(cWelcomBuffer),0);
CreateThread(NULL,0,threadproServer,(LPVOID)m_Server,0,&nThreadId); break; }
printf(\
iWhileListenCount--; if(iWhileListenCount<=0) {
printf(\建立连接失败\\n\exit(0); } }
while(1) {
memset(cSendBuffer,0,1024); scanf(\if(strlen(cSendBuffer)>0) {
ires=send(m_Server,cSendBuffer,strlen(cSendBuffer),0); if(ires<0) {
printf(\发送失败\} else {
sprintf(cShowBuffer,\printf(\
fwrite(cShowBuffer,sizeof(char),strlen(cShowBuffer),ioutfileServer);
}
if(strcmp(\{
ExitSystem(); } } } }
//客服端接收消息的线程
DWORD WINAPI threadproClient(LPVOID pParam) {
SOCKET hsock=(SOCKET)pParam ; char cRecvBuffer[1024]; char cShowBuffer[1024]; int num=0;
if(hsock!=INVALID_SOCKET) printf(\while(1) {
num=recv(hsock,cRecvBuffer,1024,0); if(num>=0) {
cRecvBuffer[num]='\\0';
sprintf(cShowBuffer,\printf(\
fwrite(cShowBuffer,sizeof(char),strlen(cShowBuffer),ioutfileClient); fflush(ioutfileClient);
if(strcmp(\{
ExitSystem(); } } }
return 0; }
//创建点对点客服端
void CreateClient() {
SOCKET m_SockClient;
struct sockaddr_in clientaddr; char cServerIP[128]; int iWhileIP=10; int iCnnRes;
DWORD nThreadId=0;
char cSendBuffer[1024]; char cShowBuffer[1024]; char cRecvBuffer[1024]; int num; int ires; int iIPRes;
m_SockClient=socket(AF_INET,SOCK_STREAM,0); printf(\请输入服务器地址\ scanf(\
if(strlen(cServerIP)==0)
strcpy(cServerIP,\ else {
iIPRes=CheckIP(cServerIP); while(!iIPRes && iWhileIP>0) {
printf(\请重新输入服务器地址:\\n\ scanf(\ iWhileIP--; if(iWhileIP<=0) {
printf(\输入次数过多\\n\ exit(0); } } }
ioutfileClient=fopen(\ clientaddr.sin_family=AF_INET; clientaddr.sin_port=htons(4600);
clientaddr.sin_addr.S_un.S_addr=inet_addr(cServerIP); iCnnRes=connect(m_SockClient,(struct sockaddr*)&clientaddr,sizeof(struct sockaddr)); if(iCnnRes==0) {
num=recv(m_SockClient,cRecvBuffer,1024,0);
if(num>0) {
printf(\
CreateThread(NULL,0,threadproClient,(LPVOID)m_SockClient,0,&nThreadId); }
while(1) {
memset(cSendBuffer,0,1024); scanf(\ if(strlen(cSendBuffer)>0) {
ires=send(m_SockClient,cSendBuffer,strlen(cSendBuffer),0); if(ires<0) {
printf(\发送失败\\n\ } else {
sprintf(cShowBuffer,\to :%s\\n\
printf(\
fwrite(cShowBuffer,sizeof(char),strlen(cShowBuffer),ioutfileClient);
fflush(ioutfileClient); }
if(strcmp(\ {
ExitSystem();
} } } }//iCnnRes else {
printf(\连接不正确\\n\ } }
//网络通信系统主函数
int main(void) {
int iSel=0; WSADATA wsd;
WSAStartup(MAKEWORD(2,2),&wsd); do {
printf(\选择程序类型:\\n\printf(\点对点服务端:1\\t\\t\\t\printf(\点对点客服端:2\\n\
//printf(\服务器中转服务端:3\\n\//printf(\服务器中转客服端:4\\n\scanf(\
}while(iSel<0 || iSel>2);
switch(iSel) {
case 1: CreateServer();break; case 2:CreateClient();break;
//case 3:CreateTranServer();break; //case 4:CreatTranClient();break; }
printf(\退出系统 \\n\
return 0; }
正在阅读:
C语言编写的仿QQ局域网通讯程序11-11
金蝶k3应收应付七大议题简析08-27
新能源汽车演讲稿02-02
静电场的边值问题01-24
有关愚人节的英语文章05-11
山西省煤矿通信联络系统检查评分标准06-10
2013年福建省考试录用公务员省直政府系统拟录用人员的公示01-18
总师办部门职责11-19
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 局域网
- 编写
- 语言
- 通讯
- 程序
- 内蒙古赤峰市初中毕业、升统一考试试卷物理试题 通用 - 图文
- 患者突发病情变化的应急预案演练剧情
- 2014年上海财经大学《公司理财》习题集
- 北京活力东方购物中心项目提案(DOC) - 图文
- 职业院校顶岗实习任务书
- 新形势下环境保护现状及应对措施分析
- 中国海洋大学教职工子女幼儿园保教费报销申请表
- 第9章习题答案
- 家长学校教案
- 新材料作文“老人和陌生人的问答”范文四篇
- 10116xx37周项勇-基于BP神经网络的语音识别系统-毕业设计论文
- 房地产开发公司会计年度工作总结
- 2015年7月中国医科大学考试系统解剖学复习题
- 某植物园扩建工程施工组织设计
- 人教新目标八年级英语下册Unit 8 课时训练(含答案)
- 《宋崇导演教你拍摄微电影》全部知识点
- 水利工程土石方开挖施工方案
- 慢性病预防与保健习题
- 经修正的《关于消耗臭氧层物质的蒙特利尔议定书》
- 《材料科学基础》课后习题(西工大版)-考研必备 - 图文