首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCPServer TCPClient三次握手模拟编程

TCPServer TCPClient三次握手模拟编程

作者头像
用户1154259
发布2018-01-17 14:25:05
5840
发布2018-01-17 14:25:05
举报

套接字创建和关闭:

SOCKET socket(int af,int type,int protocal);

套接字类型:

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

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

SOCK_RAW 原始套接字

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

int bind(
SOCKET s,//套接字句柄
const struct sockaddr * name,//关联的本地地址
int namelen//地址的长度
);

监听

int listen(
SOCKET s,//套接字
int backlog//最大连接数
)

连接

int accept(
SOCKET s,
struct sockaddr* addr,//取得对方的地址信息
int* addrlen//指向地址长度
);

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

收发数据

int send(
SOCKET s,
const char FAR* buf,//要发送数据的缓冲区地址
int len,//缓冲区长度
int flags//指定调用方式,通常为0
);
int recv(
SOCKET s,
char FAR* buf,
int len,
int
);

TCPSERVER端代码:

 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 端代码:

 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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档