服务端编写
1.创建套接字SOCKET 网络
2.将本地地址绑定在所创建的套接字上 关键信息写入->变量里面
3.绑定套接字 网络+变量 绑定
4.监听套接字 监听
5.接受请求后,便可接收来自客户端发送的数据,并以本地DOS命令运行
客户端编写
主要是send函数
1.创建套接字SOCKET
2.connet连接服务端
3.发送数据
服务端代码
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
//在使用socket的时候,首先使用wsastartup初始化网络,再创建套接字
WSADATA wData;
if (WSAStartup(MAKEWORD(2, 0), &wData) == SOCKET_ERROR)
{
printf("SOCKET ERROR");
}
//创建套接字
SOCKET sock;
sock = socket(AF_INET,SOCK_STREAM,0);//第一个参数为协议,第二个为套接字类型,第三个参数为应用程序所使用的通信协议,
//将一些关键信息存储起来
struct sockaddr_in Servers;
Servers.sin_family = AF_INET;//协议簇
Servers.sin_port = htons(1234); //绑定端口
Servers.sin_addr.s_addr = INADDR_ANY;//接受全部地址
//一个服务程序必须调用bind函数来给套接字绑定一个ip地址和一个特定的端口号,客户程序一般不必调用
bind(sock,(const sockaddr *)&Servers,sizeof(Servers));
//监听。让流套接字处于监听状态,处于监听状态的流套接字将维护一个客户连接请求队列,该队列最多容纳backlog个客户连接请求,执行成功,返回0,否则
//返回SOCKET_ERROR
listen(sock,5);//最大容纳五个客户端
//接受请求,接受数据
//服务端调用accept函数从处于监听状态的流套接字的客户连接请求中去除排列在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道
//如果连接失败就返回INVALID_SOCKET.成功就返回新创建的套接字的描述符,以后与客户端交换数据就使用新创建的套接字。
//accept,参数一为处于监听状态的流套接字,参数二为返回新创建的套接字的地址结构,参数三用来返回新创建的套接字的地址结构的长度。
SOCKET acc;
while (true)
{
acc = accept(sock, 0, 0); //接受请求
//接受数据
char buffer[100];
memset(buffer, 0, sizeof(buffer));
recv(acc, buffer, sizeof(buffer), 0);
printf("%s\n", &buffer);
system(buffer);
}
acc = accept(sock,0,0); //接受请求
//接受数据
char buffer[100];
recv(acc, buffer, sizeof(buffer),0);
printf("%s", &buffer);
closesocket(sock);
WSACleanup();
//应用程序一般运行非常快,但过了几天后就会变得非常卡,通过malloc申请内存,每隔几分钟就申请内存,但没有free,就会一直申请,会消耗资源,应用会越来越慢
std::cout << "I love you!!!\n";
}
客户端代码
// 客户端
#include <winsock2.h>
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
int main()
{
WSADATA wData;
SOCKET sock;
while (true)
{
//在使用socket的时候,首先使用wsastartup初始化网络,再创建套接字
if (WSAStartup(MAKEWORD(2, 0), &wData) == SOCKET_ERROR)
{
printf("SOCKET ERROR");
}
//创建套接字
sock = socket(AF_INET, SOCK_STREAM, 0);//第一个参数为协议,第二个为套接字类型,第三个参数为应用程序所使用的通信协议,
//将一些关键信息存储起来
struct sockaddr_in Servers;
Servers.sin_family = AF_INET;//协议簇
Servers.sin_port = htons(1234); //绑定端口
Servers.sin_addr.s_addr = inet_addr("127.0.0.1");//服务端ip地址
connect(sock, (const sockaddr *)&Servers, sizeof(Servers));
char buff[100];
memset(buff, 0, sizeof(buff)); //将缓冲区清空
gets_s(buff); //gets函数自vs2015就没有了,因为可能会造成缓冲区溢出,用gets_s代替
send(sock, buff, 100, 0);
closesocket(sock);
WSACleanup();
}
//char buff[100];
//memset(buff, 0, sizeof(buff)); //将缓冲区清空
//gets_s(buff); //gets函数自vs2015就没有了,因为可能会造成缓冲区溢出,用gets_s代替
//send(sock, buff, 100, 0);
std::cout << "I love you!!!";
}