前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TCPServer TCPClient三次握手模拟编程

TCPServer TCPClient三次握手模拟编程

作者头像
用户1154259
发布于 2018-01-17 06:25:05
发布于 2018-01-17 06:25:05
64500
代码可运行
举报
运行总次数:0
代码可运行

套接字创建和关闭:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SOCKET socket(int af,int type,int protocal);

套接字类型:

SOCK_STREAM 流套接字,TCP提供有连接的可靠传输

SOCK_DGRAM 数据包套接字,UDP提供无连接的不可靠传输

SOCK_RAW 原始套接字

绑定套接字到指定的IP地址和端口号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int bind(
SOCKET s,//套接字句柄
const struct sockaddr * name,//关联的本地地址
int namelen//地址的长度
);

监听

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int listen(
SOCKET s,//套接字
int backlog//最大连接数
)

连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int accept(
SOCKET s,
struct sockaddr* addr,//取得对方的地址信息
int* addrlen//指向地址长度
);

int connect(
  SOCKET s,
  const struct sockaddr FAR* name,//连接的地址信息
  int namelen  //结构长度
);

收发数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int send(
SOCKET s,
const char FAR* buf,//要发送数据的缓冲区地址
int len,//缓冲区长度
int flags//指定调用方式,通常为0
);
int recv(
SOCKET s,
char FAR* buf,
int len,
int
);

TCPSERVER端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 // TCP.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <winsock2.h>
 6 #include <stdio.h>
 7 
 8 #pragma comment(lib,"WS2_32")
 9 class CInitSock
10 {
11 public:
12     CInitSock(BYTE minorVer=2,BYTE majorVer=2)
13     {
14         WSADATA wsaData;
15         WORD sockVersion = MAKEWORD(minorVer,majorVer);
16         if(::WSAStartup(sockVersion,&wsaData)!=0)
17         {
18             exit(0);
19         }
20     }
21     ~CInitSock()
22     {
23         ::WSACleanup();
24     }
25 };
26 CInitSock initSock;
27 int _tmain(int argc, _TCHAR* argv[])
28 {
29     SOCKET sListen = ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
30     if(sListen == INVALID_SOCKET)
31     {
32         printf("Failed socket()\n");
33         return 0;
34     }
35     //填充sockaddr_in结构
36     sockaddr_in sin;
37     sin.sin_family = AF_INET;
38     sin.sin_port = htons(4567);
39     sin.sin_addr.S_un.S_addr = INADDR_ANY;
40     //绑定这个套接字的一个本地地址
41     if(::bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
42     {
43         printf("Failed bind()\n");
44         return 0;
45     }
46     //进入监听模式
47     if(::listen(sListen,2) == SOCKET_ERROR)
48     {
49         printf("Failed listen()\n");
50         return 0;
51     }
52     //循环接受客户的连接请求
53     sockaddr_in remoteAddr;
54     int nAddrLen = sizeof(remoteAddr);
55     SOCKET sClient;
56     char szText[] = "TCP Server Demo!\r\n";
57     while(TRUE)
58     {
59         //接受新连接
60         sClient=::accept(sListen,(SOCKADDR*)&remoteAddr,&nAddrLen);
61         if(sClient == INVALID_SOCKET)
62         {
63             printf("Failed accept()");
64             continue;
65         }
66         printf("接受到一个连接:%s\r\n",inet_ntoa(remoteAddr.sin_addr));
67         //向客户端发送数据
68         ::send(sClient,szText,strlen(szText),0);
69         //关闭同客户端的连接
70         ::closesocket(sClient);
71     }
72     ::closesocket(sListen);
73     return 0;
74 }

TCPClient 端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 // TCPClient.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <winsock2.h>
 6 #include <stdio.h>
 7 #pragma comment(lib,"WS2_32")
 8 class CInitSock
 9 {
10 public:
11     CInitSock(BYTE minorVer=2,BYTE majorVer=2)
12     {
13         WSADATA wsaData;
14         WORD sockVersion = MAKEWORD(minorVer,majorVer);
15         if(::WSAStartup(sockVersion,&wsaData)!=0)
16         {
17             exit(0);
18         }
19     }
20     ~CInitSock()
21     {
22         ::WSACleanup();
23     }
24 };
25 CInitSock initSock;
26 
27 int _tmain(int argc, _TCHAR* argv[])
28 {
29     SOCKET s= ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
30     if(s==INVALID_SOCKET)
31     {
32         printf("Failed socket()\n");
33         return 0;
34     }
35     sockaddr_in servAddr;
36     servAddr.sin_family=AF_INET;
37     servAddr.sin_port=htons(4567);
38     servAddr.sin_addr.S_un.S_addr=inet_addr("49.140.16.244");
39     if(::connect(s,(sockaddr*)&servAddr,sizeof(servAddr))==-1)
40     {
41         printf("Failed connect()\n");
42         return 0;
43     }
44     //接受数据
45     char buff[256];
46     int nRecv=::recv(s,buff,256,0);
47     if(nRecv>0)
48     {
49         buff[nRecv] = '\0';
50         printf("接受到数据:%s",buff);
51     }
52     ::closesocket(s);
53     return 0;
54 }

结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Socket 简单通信
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
7860
通信原理一个月能学会吗_通信原理第六版
Socket通信原理 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:
全栈程序员站长
2022/11/02
3210
【网络编程系列】二:socket通信原理及实践
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下: 1、网络中进程之间如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函数 3.2、bind()函数 3.3、l
老白
2018/03/19
1.8K0
【网络编程系列】二:socket通信原理及实践
Socket原理
对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 1. 什么是TCP/IP、UDP? 2. Socket在哪里呢? 3. Socket是什么呢? 4. 你会使用它们吗? 什么是TCP/IP、UDP?
科控物联
2022/03/29
5810
Socket原理
Socket通信原理
对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1.什么是TCP/IP、UDP?2.Socket在哪里呢?3.Socket是
Java架构师必看
2021/12/08
9820
Socket通信原理
windows环境下用c++实现socket编程
socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。
全栈程序员站长
2022/09/14
5.3K0
windows环境下用c++实现socket编程
windows环境下用c++实现socket编程
    socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。
Sindsun
2019/12/06
3.1K0
windows环境下用c++实现socket编程
WSAEventSelect模型 ---应用实例,重写TCP服务器实例
// WSAEvent.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <winsock2.h> #include <stdio.h> #pragma comment(lib,"WS2_32") class CInitSock { public: CInitSock(BYTE minorVer=2,BYTE majorVer=2) { WSADATA wsaData; WORD sock
用户1154259
2018/01/17
1.1K0
WSAAsyncSelect模型
WSAAsyncSelect模型允许程序以windows消息的形式接受网络事件通知 WSAAsyncSelect函数自动把套接字设为非阻塞模式,并且为套接字绑定一个窗口句柄,当有网络事件发生时,便向这个窗口发送消息 int WSAAsyncSelect( SOCKET s, //套接字句柄 HWND hWnd,//指定一个窗口句柄 u_int wMsg,//网络事件到来的消息ID long lEvent//指定那些需要发送 ); FD_READ:接收对方发送的数据包 FD_W
用户1154259
2018/01/17
7900
网络时间协议 --- 网络对时程序
1 // TCPIP time protocol.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <winsock2.h> 6 #include <stdio.h> 7 #pragma comment(lib,"WS2_32") 8 class CInitSock 9 { 10 public: 11 CInitSock(BYTE minorVer=2,BYTE majorVer=2) 12
用户1154259
2018/01/17
9130
网络攻防实验之缓冲区溢出攻击
3、新建一个C++ Source File,文件名为server,作为服务器。
全栈程序员站长
2022/09/14
7870
选择模型2
选择模型 fd_set结构可以把多个套接字连在一起,形成一个套接字集合 typedef struct fd_set{ u_int fd_count;//下面数组的大小 SOCKET fd_array[FD_SETSIZE];//套接字句柄数组 }fd_set; 网络事件: readfds集合:数据可读,连接关闭,重启或者中断 writefds集合:数据能发送 exceptfds集合:OOB数据可读 设置超时: 如果为null为无限阻塞,知道有网络事件发生 typedef struct timeval{ lo
用户1154259
2018/01/17
5640
c socket
套接字(socket) *是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。 *
全栈程序员站长
2022/09/07
6880
c socket
UDP连接代码
由于只有部分代码,自己填不上.......程序未能运行成功,悲剧! server: 1 SOCKET s = ::socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP); 2 if(s == INVALID_SOCKET) 3 { 4 printf("Failed socket()\n"); 5 return 0; 6 } 7 //填充sockaddr_in结构 8 sockaddr_
用户1154259
2018/01/17
8000
14.4 Socket 双向数据通信
所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建CreateThread()函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。
王 瑞
2023/10/14
3840
14.4 Socket 双向数据通信
网络嗅探器
网络嗅探器:把网卡设置成混杂模式,并可实现对网络上传输的数据包的捕获与分析。 原理:   通常的套接字程序只能响应与自己MAC地址相匹配的 或者是 广播形式发出的数据帧,对于其他形式的数据帧网络接口采取的动作是直接丢弃   为了使网卡接收所有经过他的封包,要将其设置成混杂模式,通过原始套接字来实现。 设置混杂模式:   创建原始套接字,   绑定到一个明确的本地地址,   向套接字发送SIO_RCVALL控制命令,   接收所有的IP包 代码实现步骤:   1 创建原始套接字   2 绑定到明确地址   3
用户1154259
2018/01/17
2.1K0
网络嗅探器
c语言网络通信_c语言tcp网络编程
TCP/IP协议包含的范围非常的广,它是一种四层协议,包含了各种硬件、软件需求的定义。TCP/IP协议确切的说法应该是TCP/UDP/IP协议。UDP协议(User Datagram Protocol 用户数据报协议),是一种保护消息边界的,不保障可靠数据的传输。TCP协议(Transmission Control Protocol 传输控制协议),是一种流传输的协议。他提供可靠的、有序的、双向的、面向连接的传输。
全栈程序员站长
2022/11/01
8.6K0
c++ 网络编程(一)TCP/IP 入门级客户端与服务端交互代码
原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html
徐飞机
2018/09/30
2.2K0
c++ 网络编程(一)TCP/IP  入门级客户端与服务端交互代码
VS2019:基于UDP协议的回声服务器
编译环境:Windows ,VS2019 UDP_Server.cpp #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll #pragma warning(disable : 4996) #define BUF_SIZE 100 int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaDa
Gabriel
2022/11/15
6760
VS2019:基于UDP协议的回声服务器
使用socket实现TCP和UDP传输
转载自:https://blog.csdn.net/timmiy/article/details/51946093
战神伽罗
2019/09/03
1.7K0
使用socket实现TCP和UDP传输
相关推荐
Socket 简单通信
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验