ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于TCP的socket编程(C++)

2022-07-13 09:03:57  阅读:167  来源: 互联网

标签:addr AF C++ TCP 接字 include sin INET socket


服务器端

//TCP服务端
#include<winsock2.h>                                //包含头文件
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<ws2tcpip.h>

#pragma comment(lib, "WS2_32.lib")                 //显示连接套接字库

using namespace std;

int main()
{
	WSADATA data;                                 //定义WSADATA结构体对象
	WORD w = MAKEWORD(2, 0);                      //定义版本号码
	::WSAStartup(w, &data);                       //初始化套接字
	SOCKET s;                                     //定义连接套接字和数据收发套接字句柄
	s = ::socket(AF_INET, SOCK_STREAM, 0);        //创建tcp套接字
	sockaddr_in addr;                             //定义套接字地址结构
	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);                               //监听套接字,5并不是时间而是最大监听5个
	cout << "服务端已启动..." << endl;

	sockaddr_in addr2;
	int n = sizeof(addr2);
	SOCKET s1;
	char sztext[] = "您已成功连接服务端...\n";
	char buffer[17];
	while (true)
	{

		s1 = ::accept(s, (sockaddr*)&addr2, &n);            //接受连接请求
		if (s1 != NULL)                                     //不能使用s1 != nullptr
		{
			cout <<"地址:" << inet_ntop(AF_INET, (const void*)&addr2.sin_addr, buffer, 17) << "已经连接到服务端" << endl;
			::send(s1, sztext, sizeof(sztext), 0);             //向客户端发送信息
		}
		::closesocket(s);                                  //关闭套接字句柄
		::closesocket(s1);
		::WSACleanup();                                    //释放套接字库

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

  客户端:

/*
* TCP客户端代码
*/

#include<winsock2.h>
#include<stdio.h>
#include<Windows.h>
#include<iostream>
#include<ws2tcpip.h>

#pragma comment(lib, "WS2_32.lib")                  //显示连接套接字库

using namespace std;

int main()
{
	WSADATA data;                                  //定义WSADATA结构体对象
	WORD w = MAKEWORD(2, 0);                       //定义版本号码
	::WSAStartup(w, &data);                        //初始化套接字库
	SOCKET s = ::socket(AF_INET, SOCK_STREAM, 0);  //定义连接套接字句柄
	sockaddr_in addr;                             //定义套接字地址结构
	addr.sin_family = AF_INET;
	addr.sin_port = htons(75);
	inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr.S_un.S_addr);
	cout << "客户端已启动..." << endl;
	::connect(s, (sockaddr*)&addr, sizeof(addr));
	char sztext[50];
	::recv(s,sztext, sizeof(sztext), 0);
	cout<<sztext<<endl;
	::closesocket(s);
	::WSACleanup();
	if (getchar())
	{
		return 0;
	}
	else
	{
		::Sleep(100);              
	}
	return 0;
}

  

标签:addr,AF,C++,TCP,接字,include,sin,INET,socket
来源: https://www.cnblogs.com/xcxfury001blogs/p/16472499.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有