window环境下C++网络编程

1.服务器端步骤:创建套接字,绑定,监听,接收连接(accept)

 

#include <iostream>
#include<windows.h>
#include<winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

void main()
{
	//API提供的调用方可使用的最高版本号
	WORD wVersionRequested = MAKEWORD(2, 2);
	WSADATA wsaData;
	//向操作系统说明,我们要用哪个库文件,让该库文件与当前的应用程序绑定
	//该函数执行成功后返回0
	int err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		return;  
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
	{
		//应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来
		//解除与Socket库的绑定并且释放Socket库所占用的系统资源
		WSACleanup();
		return;
	}

	//第一步:创建套接字
    //SOCK_STREAM为TCP,SOCK_DGRAM为UDP
	SOCKET socketSer = socket(AF_INET, SOCK_STREAM, 0);
	SOCKADDR_IN addrSer, addrCli;
	addrSer.sin_family = AF_INET;
	addrSer.sin_port = htons(5050); // 将主机字节顺序转为网络字节顺序
	addrSer.sin_addr.S_un.S_addr = inet_addr("192.168.1.1");
	//第二步:绑定套接字
	bind(socketSer, (sockaddr*)&addrSer, sizeof(SOCKADDR));
	//第三步:监听
	listen(socketSer, 5);  //第2个参数表示队列大小
	cout << "Server Wait Client Connect......." << endl;
	//第四步:接收连接
	SOCKET sockConn = accept(socketSer, (sockaddr*)&addrCli, &(sizeof(SOCKADDR)));
	if (sockConn == INVALID_SOCKET)//INVALID_SOCKET非法套接字
	{
		cout << "Server Accept Client Connect Fail" << endl;
		return;
	}
	else
	{
		cout << "Server Accept Client Connect Success" << endl;
		return;
	}
	char sendbuf[256];
	char recvbuf[256];
	while (1)
	{
		cout << "Ser:>";
		cin >> sendbuf;   //缓冲区
		if (strcpy(sendbuf, "quit") == 0)
		{
			break;
		}
		send(sockConn, sendbuf, strlen(sendbuf) + 1, 0);//套接字,缓冲,长度
		recv(sockConn, recvbuf, 256, 0);
		cout << "Cli:>" << recvbuf << endl;
	}
	closesocket(socketSer);
	WSACleanup();//清除版本信息
}

2.客户端步骤:创建套接字,连接服务器(connect)

#include<iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD(2, 2);

    err = WSAStarup(wVersionRequested, &wsaData);
    if (err != 0)
    {
        //tell the user that we could nto find a usable
        //WinSock DLL;
        return;
    }
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
    {
        WSACleanup();
        return;
    }
    
    //第一步:创建套接字
    SOCKET sockCli;
    sockCli = socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(5050);
    addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    //第二步:向服务器发起连接请求
    int res = connect(sockCli, (SOCKADDR*)&addrSer, sizeof(SOCKADDR));//res为connect返回值 查阅相关函数,若为0则表示没有错误
    if (res != 0)
    {
        cout << "Client Connect Servrer Fail!" << endl;
        return;
    }
    else
    {
        cout << "Client Connect Servrer Success!" << endl;
    }
    char sendbuf[256];
    char recvbuf[256];//发空间和接收空间
    while (1)
    {
        //接收
        recv(sockCli, recvbuf, 256, 0);
        cout << "Ser:>" << recvbuf << endl;

        cout << "Cli:>";
        cin >> sendbuf;
        if (strcmp(sendbuf, "quit") == 0)//客户端请求退出
        {
            break;
        }
        //发送
        send(sockCli, sendbuf, strlen(sendbuf) + 1, 0);
    }
    closesocket(sockCli);
    WSACleanup();
}

常见问题:待补充。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值