#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
FILE *f;
char szLine[MAX_PATH];
char buffer[MAX_PATH];
fopen_s(&f, "D:\\info.txt", "r");
if (f == NULL)
{
printf("无法打开文件\n");
return;
}
//windows操作系统下的初始化工作,加载套接字库
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1) {
WSACleanup();
return;
}
//创建套接字,因为是基于UDP的,所以用SOCK_DGRAM.
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);
//对于服务器端,接着应该进行绑定
SOCKADDR_IN addrSrv;//定义一个地址结构体的变量,
addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.104");
//地址族,AF这个前缀表示地址族(address family)
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);//端口号
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
char recvBuf[100];//字符数组,用来接收信息
char sendBuf[100];//用来发送信息
char tempBuf[200];//用来存放中间数据
//定义一个地址结构体的变量,在通讯的时候,
/*我们需要获取和我们通讯的这一方的地址信息,
这一获取是我们通过调用recvfrom来获得的,但是我们需要提供一个地址结构体的变量*/
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
printf("服务器开启成功等待客户连接\n");
//while循环,保证通讯过程能够不断的循环下去
while (1)
{
//接收数据
recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);
//判断是否结束对话,q表示结束
if ('q' == recvBuf[0])
{
sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrClient, len);
printf("对话结束!\n");
break;
}
//将数据格式化到tempBuf中
//addrClient.sin_addr表示对方的IP地址,
//inet_ntoa将IP转换为点分十进制表示的形式,如172.0.0.1
sprintf_s(tempBuf, "%s say:%s", inet_ntoa(addrClient.sin_addr), recvBuf);
//将数据打印输出
printf("%s\n", tempBuf);
//把文件指针指向文件的开头
fseek(f, 0, SEEK_SET);
//对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));
memset(szLine, 0, MAX_PATH);
//szLine: 字符型指针,指向存储读入数据的缓冲区的地址。
//MAX_PATH: 从流中读入MAX_PATH - 1个字符
//f : 指向读取的流。
//取的数据保存在szLine指向的字符数组中
fgets(szLine, MAX_PATH, f);
//printf("%s\n", szLine);
while (szLine[0] != '#')
{
if (szLine[0] == 'Q')
{
char szTemp[MAX_PATH] = { 0 };
//复制字符串szLine + 2到缓冲区szTemp
lstrcpyA(szTemp, szLine + 2);
szTemp[lstrlenA(szTemp) - 1] = '\0';
//匹配成功找到答案
if (lstrcmpA(szTemp, recvBuf) == 0)
{
memset(szLine, 0, MAX_PATH);
fgets(szLine, MAX_PATH, f);
//向客户端发送udp数据报,即回答客户端的消息
//参数sockSrv为已建好连线的socket,如果利用UDP协议则不需经过连线操作。
//参数 szLine+2欲连线的数据内容,参数flags 一般设0,
//szLine加2的原因是从读取的字符的第三个字符开始输出,因为前两个字符为A:
sendto(sockSrv, szLine + 2, strlen(szLine) - 1, 0, (SOCKADDR*)&addrClient, len);
printf("服务器对话框输出内容:\n");
printf("%s", szLine+2);
break;
}
}
memset(szLine, 0, MAX_PATH);
fgets(szLine, MAX_PATH, f);
//printf("%s\n", szLine);
}
if (szLine[0]== '#')
{
memset(buffer, 0, MAX_PATH);
sprintf_s(buffer, "听不懂,");
sendto(sockSrv, buffer + 2, strlen(buffer) - 1, 0, (SOCKADDR*)&addrClient, len);
//printf("Please input data:\n");
//gets_s(sendBuf);//从键盘输入数据
//sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrClient, len);//发送数据
}
}
//当循环结束的时候,关闭套接字
closesocket(sockSrv);
//终止对套接字的使用
WSACleanup();
fclose(f);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
winSocket.zip (48个子文件)
Client
.vs
Client
v14
.suo 24KB
Client
Client.vcxproj 7KB
Clientcpp.cpp 2KB
Client.vcxproj.filters 950B
Debug
vc140.pdb 172KB
Client.log 171B
Clientcpp.obj 35KB
vc140.idb 531KB
Client.tlog
CL.write.1.tlog 456B
CL.read.1.tlog 20KB
CL.command.1.tlog 654B
Client.lastbuildstate 198B
link.write.1.tlog 424B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
Client.sln 1KB
Debug
Client.pdb 756KB
Client.ilk 434KB
Client.exe 39KB
Client.VC.db 29.14MB
Sercver
.vs
Sercver
v14
.suo 24KB
Sercver
Server.plg 1KB
Server.cpp 4KB
Sercver.vcxproj.filters 947B
Sercver.vcxproj 7KB
Server.ncb 33KB
Server.opt 48KB
Server.dsw 518B
Server.dsp 3KB
Debug
Sercver.log 287B
vc140.pdb 172KB
vc60.idb 129KB
vc140.idb 531KB
Server.obj 35KB
Sercver.tlog
CL.write.1.tlog 460B
CL.read.1.tlog 20KB
CL.command.1.tlog 650B
link.write.1.tlog 434B
Sercver.lastbuildstate 199B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
vc60.pdb 44KB
Server.pch 3.47MB
Sercver.sln 1KB
Debug
Sercver.pdb 772KB
Sercver.exe 38KB
Sercver.ilk 509KB
Sercver.VC.db 25.34MB
共 48 条
- 1
资源评论
- Victorique·De·Blois2018-12-20有指导价值
JavaGuide
- 粉丝: 1w+
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功