原文转自 http://blog.csdn.net/supersonico/article/details/18900319

一.用VC++来编写TCP 服务器/客户端的简单程序。

注意事项:

1.要加载ws2_32.lib链接库。

项目->属性->弹出属性页->连接器->输入->附加依赖项

2.要使用#include <WinSock2.h>头文件。

实现步骤:

1.服务器端:

①加载套接字库 (可以直接从MSDN上复制  WSAStartup)

②创建socket

③绑定socket(bind)

④将socket设置成监听状态(listen)

⑤等待客户端的访问(accept)

⑥接收客户端信息(recv)

⑦往客户端发送信息(send)

⑧关闭套接字(closesocket)

⑨清除套接字库(WSACleanup)

#include <iostream>
#include <WinSock2.h>
#include <stdlib.h>
using namespace std; void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(, ); err = WSAStartup(wVersionRequested, &wsaData);
if (err != )
{
return;
}
if (LOBYTE(wsaData.wVersion) != || HIBYTE(wsaData.wVersion) != )
{
WSACleanup();
return;
} //创建用于监听的套接字
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, ); SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(); //绑定套接字
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
//将套接字设置为监听模式
listen(sockSrv, ); SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR); while ()
{
//等待客户的请求到来
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[];
sprintf_s(sendBuf, , "Welcome %s", inet_ntoa(addrClient.sin_addr)); //发送数据
send(sockConn, sendBuf, strlen(sendBuf) + , );
char recvBuf[];
//接受数据
recv(sockConn, recvBuf, , );
//打印接受的数据
printf("%s\n", recvBuf);
//关闭套接字
closesocket(sockConn);
}
}

2.客户端:

①加载套接字库

②向服务器发送请求 connect

③接受服务器的信息 recv

④向服务器发送信息 send

⑤关闭套接字 closesocket

⑥清除套接字库 WSACleanup

#include <iostream>
#include <WinSock2.h>
#include <stdlib.h>
using namespace std; void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(, ); err = WSAStartup(wVersionRequested, &wsaData);
if (err != )
{
return;
}
if (LOBYTE(wsaData.wVersion) != || HIBYTE(wsaData.wVersion) != )
{
WSACleanup();
return;
} //创建套接字
SOCKET socketClient = socket(AF_INET, SOCK_STREAM, );
//向服务器发送请求
SOCKADDR_IN sockAddrClient;
sockAddrClient.sin_addr.S_un.S_addr = inet_addr("120.77.57.44");
sockAddrClient.sin_family = AF_INET;
sockAddrClient.sin_port = htons(); if (SOCKET_ERROR == connect(socketClient, (SOCKADDR*)&sockAddrClient, sizeof(SOCKADDR)))
{
closesocket(socketClient);
WSACleanup();
return;
}
//接受信息
char recvBuf[];
recv(socketClient, recvBuf, , );
printf("%s\n", recvBuf);
//发送数据
send(socketClient, "This is lisi", strlen("This is lisi") + , );
//关闭套接字
closesocket(socketClient);
WSACleanup();
cin.get();
cin.get();
}

二.用VC++来编写UDP 服务器/客户端的简单程序。

1.服务器端:

①加载套接字库(WSAstartup)

②创建socket

③绑定socket(bind)

④接受从客户端发来的信息(recvfrom)

⑤关闭套接字(closesocket)

⑥清空套接字库(WSAClearup)

#include <iostream>
#include <stdlib.h>
#include <WinSock2.h> using namespace std; void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(,); err = WSAStartup(wVersionRequested,&wsaData);
if (err != )
{
return ;
}
if (LOBYTE(wsaData.wVersion)!= || HIBYTE(wsaData.wVersion)!=)
{
WSACleanup();
return ;
} //创建套接字
SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,); SOCKADDR_IN sockAddrSrv;
sockAddrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
sockAddrSrv.sin_family = AF_INET;
sockAddrSrv.sin_port = htons();
//绑定套接字
bind(sockSrv,(SOCKADDR*)&sockAddrSrv,sizeof(SOCKADDR)); SOCKADDR_IN sockAddrClient;
int len = sizeof(SOCKADDR);
char recvBuf[];
//接受客户端信息
recvfrom(sockSrv,recvBuf,,,(SOCKADDR*)&sockAddrClient,&len);
printf("%s\n",recvBuf); //关闭套接字
closesocket(sockSrv);
//清除套接字库
WSACleanup();
cin.get();
cin.get();
}

2.客户端:

①加载套接字库 (WSAstartup)

②创建socket

③发送数据(sendto)

④关闭套接字(closesocket)

⑤清空套接字库(WSAClearup)

#include <iostream>
#include <stdlib.h>
#include <WinSock2.h> using namespace std; void main()
{
//加载套接字
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(,); err = WSAStartup(wVersionRequested,&wsaData);
if (err != )
{
return ;
}
if (LOBYTE(wsaData.wVersion)!= || HIBYTE(wsaData.wVersion)!=)
{
WSACleanup();
return ;
}
//创建套接字
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,); SOCKADDR_IN sockAddrSrv;
sockAddrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sockAddrSrv.sin_family = AF_INET;
sockAddrSrv.sin_port = htons(); //char sendBuf[100];
sendto(sockClient,"Hello",strlen("Hello")+,,(SOCKADDR*)&sockAddrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
cin.get();
cin.get();
}

孙鑫 VC++深入详解第14课——TCP通信/UDP通信(转)的更多相关文章

  1. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  2. 孙鑫VC++视频教程(1-20课全)

    孙鑫VC++视频教程(1-20课全)PPT讲义和源代码 http://down.51cto.com/data/467760 孙鑫VC++从入门到精通开发详解视频教程[20讲] http://down. ...

  3. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  4. VC++深入详解-第五章学习心得

    这一章节主要讲解了文本相关的一些编程 插入符的使用 CreateSolidCaret(100,200);//插入符的宽度和高度 ShowCaret(); 插入符的一般使用方法 int CTestVie ...

  5. 《VC++ 深入详解》 第3版 这是盗版书么~。。。

    <VC++ 深入详解> 第3版 www.broadview.com.cn 书读到一小半,发现书重复了一部分,缺失一部分.... 难受~ 比较难继续下去了 有一样的小伙伴么~ <VC+ ...

  6. 《TCP-IP详解卷3:TCP 事务协议、HTTP、NNTP和UNIX域协议》【PDF】下载

    TCP-IP详解卷3:TCP 事务协议.HTTP.NNTP和UNIX域协议>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062539 ...

  7. VC++使用socket进行TCP、UDP通信实例总结

    1.        两台计算机通信需要协议,通信的两台计算机IP必须唯一 2.        同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一 ...

  8. 孙鑫VC++视频教程笔记

    写在前面的话:在学习孙鑫老师的VC++视频时,为了加深自己对知识的深入理解,就做了下面的笔记. 第一讲: 第二讲: 第三讲: 第四讲: 第五讲: 第六讲: 第七讲: 第八讲: 第九讲: 第十讲: 第十 ...

  9. 孙鑫VC学习系列教程

    教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...

随机推荐

  1. openwrt(一):openwrt源码下载及编译环境搭建

    声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...

  2. Hadoop2.8.0 源码编译

    一.下载源码并解压 二.检查以下几项 必须有网络!!! JDK 1.7+ 安装方法 java -version Maven 3.0 or later 安装方法 mvn -version Findbug ...

  3. PHP.TP框架下商品项目的优化4-优化商品添加表单js

    优化商品添加表单js 思路 1.制作五个按钮 2.下面五个table 3.全部隐藏,点击则显示 4.点击第几个按钮就显示第几个table 具体操作 1.添加按钮 2.添加五个table并添加class ...

  4. [转]渗透测试tips...零碎的小知识

    1.拿到一个待检测的站,你觉得应该先做什么?收集信息whois.网站源IP.旁站.C段网站.服务器系统版本.容器版本.程序版本.数据库类型.二级域名.防火墙.维护者信息另说… 2.mysql的网站注入 ...

  5. Android开发——View滑动冲突解决方案

    0. 前言   我们在Android开发--事件分发机制详解中深入学习了事件分发机制,为我们解决Android开发中的滑动冲突问题做了初步准备.针对滑动冲突这里给出两种解决方案:外部拦截法和内部拦截法 ...

  6. 如何在一个顶级域名下用两个二级域名访问vps下的两个项目网站--完美解决骗

    本人是原址是http://www.webzhe.com/server/340 后经过本人的实践修改,增加截图,等具体的步骤,完美解决 如何在vps中设置二级域名开通子网站,这个问题涉及到两步:一首先要 ...

  7. FileStream流媒体

    class Program { static void Main(string[] args) { string source = @"mana.mp4"; string targ ...

  8. 《Cracking the Coding Interview》——第2章:链表——题目6

    2014-03-18 02:41 题目:给定一个带有环的单链表,找出环的入口节点. 解法1:用hash来检测重复节点肯定是容易想而且效率也高的好办法. 代码: // 2.6 You have a ci ...

  9. 23、php知识点总结基础教程--part-1

    1.基本语法 PHP 脚本可放置于文档中的任何位置. PHP 脚本以 <?php 开头,以 ?> 结尾 <?php // 此处是 PHP 代码 ?> PHP 文件的默认文件扩展 ...

  10. java初学3

    1.包装类 Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? Java为每个原始类型提供了封装类,Integer是java为int ...