基于TCP的Sockets编程

本文通过一个简单的示例介绍了如何使用C++实现TCP服务器和客户端之间的通信。该示例包括服务器端代码用于监听连接并发送消息,以及客户端代码用于接收服务器的消息。

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

TCP服务器:

// TCP服务器.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <WinSock2.h>
#include <windows.h>

#pragma comment(lib, "WS2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA data;   
	WORD w = MAKEWORD(2, 0);                            //定义版本号码
	char sztext[] = "welcome yuippe\r\n";
	::WSAStartup(w, &data);                            //初始化套接字库
	SOCKET s, s1;                                     //定义连接套接字和数据收发套接字句柄
	s = ::socket(AF_INET, SOCK_STREAM, 0);            //创建TCP套接字
	sockaddr_in addr, addr2;                          //定义套接字地址结构
	int n = sizeof(addr2);                           //获取套接字地址结构大小
	addr.sin_family = AF_INET;                       //初始化地址结构
	addr.sin_port = htons(75);
	addr.sin_addr.S_un.S_addr = INADDR_ANY;
	::bind(s, (sockaddr*)&addr, sizeof(addr));
	::listen(s, 5);
	printf("服务器已经启动\r\n");

	while (true)
	{
		s1 = ::accept(s, (sockaddr*)&addr2, &n);
		if( s1!= NULL )
		{
			printf("%s已经连接上\r\n", inet_ntoa(addr2.sin_addr));
			::send(s1, sztext, sizeof(sztext), 0);           //向客户端发送字符数组
		}
		::closesocket(s);
		::closesocket(s1);
		::WSACleanup();                                      //释放套接字库

		if (getchar())
		{
			return 0;
		}
		else
		{
			::Sleep(100);
		}

	}

	return 0;
}

客户端:

// TCP客户端.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <WinSock2.h>


#pragma comment(lib, "WS2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{

	WSADATA data;
	WORD w = MAKEWORD(2, 0);
	::WSAStartup(w, &data);
	SOCKET s;
	char sztext[100] = {0};
	s = ::socket(AF_INET, SOCK_STREAM, 0);
	sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(75);
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	printf("客户端已经启动\r\n");
	::connect(s, (sockaddr*)&addr, sizeof(addr));
	::recv(s, sztext, sizeof(sztext), 0);

	printf("%s\r\n", sztext);
	::closesocket(s);
	::WSACleanup();
	if (getchar())
	{
		return 0;
	}
	else
	{
		::Sleep(100);
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值