C++实现Socket编程

本文详细介绍了一个基于Windows平台的Socket编程示例,包括服务器端和客户端代码。通过实例演示了如何使用Winsock库进行TCP通信,涵盖了初始化、创建套接字、绑定、监听、接受连接、数据收发等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 课程设计
  • 若编译不通过,就百度所出现的错误,然后修改编辑器设置便可
  • socket编程时,使用codeblocks需要加载libws2_32.a

服务器端代码

#include <iostream>
#include <stdio.h>
#include <winsock2.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32.lib")

using namespace std;

int main()
{
    //初始化
    WSADATA wsaDate;
    WORD version=MAKEWORD(2,2);
    WSAStartup(version,&wsaDate);

    //创建套接字
    SOCKET slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

    //绑定IP和端口
    sockaddr_in local;
    local.sin_family=AF_INET;
    local.sin_port=htons(8888);
    local.sin_addr.S_un.S_addr=INADDR_ANY;
    bind(slisten,(struct sockaddr *)&local,sizeof(sockaddr_in));

    //开始监听
    listen(slisten,3);

    //数据处理
    SOCKET sclient;
    sockaddr_in client;
    int addrsize=sizeof(client);
    char revData[255];
    cout<<" 等待连接..."<<endl;
    sclient=accept(slisten,(struct sockaddr *)&client,&addrsize);
    cout<<" 接收到一个连接:"<<inet_ntoa(client.sin_addr)<<endl;
    int ret;
    while (true)
    {

        //接收数据
        ret = recv(sclient, revData, 255, 0);
        revData[ret] = '\0';
        cout<<" ["<<inet_ntoa(client.sin_addr)<<"]:"<<revData<<endl;

        //发送数据
        const char * sendData = " TCP服务端已接收数据!";
        send(sclient, sendData, strlen(sendData), 0);
    }
    closesocket(slisten);
    WSACleanup();

    return 0;
}

客户端代码

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

int main()
{
    //初始化
    WSADATA wsaData;
    WORD version=MAKEWORD(2,2);
    WSAStartup(version,&wsaData);
    //创建套接字
    SOCKET sclient;
    sclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    //绑定IP和端口
    sockaddr_in server;
    memset(&server,0,sizeof(sockaddr_in));
    server.sin_family=PF_INET;
    server.sin_port=htons(8888);
    server.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    //连接服务器
    connect(sclient,(struct sockaddr*)&server,sizeof(sockaddr_in));
    cout<<" TCP客户端启动!"<<endl;
    cout<<" 已连接TCP服务端!"<<endl;
    //发送数据
    while (TRUE)
    {
        string data;
        cout<<" 发送数据:";
		getline(cin,data);
		const char * sendData;
		sendData = data.c_str();
		send(sclient, sendData, strlen(sendData), 0);
		char recData[255];
		int ret = recv(sclient, recData, 255, 0);
		if(ret>0){
			recData[ret] = 0x00;
			cout<<recData<<endl;
		}
    }

    // 释放连接和进行结束工作
    closesocket(sclient);
    WSACleanup();

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值