TCP通信
//网络套接字编程实例,服务器端,TCP通信。
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(,),&wsaData); //初始化版本
SOCKET sList = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //初始化socket
if (sList == INVALID_SOCKET) //判断socket是否建立成功
{
cout << "socket error\n";
}
else
{
cout << "socket success\n";
}
sockaddr_in asd; //申明bind中addr参数,这是申明,一个结构体。
asd.sin_family = AF_INET; //设置结构体,必须是:AF_INET
asd.sin_port = htons(); //指定TCP或UDP通信服务端口号,htons函数将主机无符号短整型转换成网络字节顺序,1990是本地监听的端口号。
asd.sin_addr.S_un.S_addr = INADDR_ANY; //INADDR_ANY表示所有可用地址
if (bind(sList, (LPSOCKADDR)&asd, sizeof(asd)) == SOCKET_ERROR) //绑定本地IP和端口
{
cout << "bind error";
closesocket(sList);
;
}
) == SOCKET_ERROR)
{
cout << "listen error";
closesocket(sList);
;
}//监听,5为连接最数,注意listen只支持上面的SOCK_STREAM也就是TCP,UDP不用条用此函数。
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
SOCKET sClient;
int nAddrlen = sizeof(remoteAddr);
];
)
{
// 接受一个新连接
sClient = accept(sList, (SOCKADDR*)&remoteAddr, &nAddrlen);
//错误
if (sClient == INVALID_SOCKET)
{
cout << "accept error";
continue;
}
//打印出连接者的ip
cout << " 接受到一个连接:" << inet_ntoa(remoteAddr.sin_addr)<<"\n";
, );
)
{
//为了防止打印出错,把字符串结尾设成0x00
revData[ret] = 0x00;
cout<<revData;
}
//发送给客户端数据
char *buff = "握手,我是来自服务端的信息,TCP建立成功\n";
send(sClient, buff, strlen(buff), );
closesocket(sClient);
}
closesocket(sList);
system("pause");
;
}
//网络套接字编程实例,客户端。
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <windows.h>
#include <WS2tcpip.h>
using namespace std;
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(, ), &wsaData); //初始化版本
SOCKET sList = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //初始化socket
if (sList == INVALID_SOCKET) //判断socket是否建立成功
{
cout << "socket error\n";
}
else
{
cout << "socket success\n";
}
sockaddr_in asd; //申明bind中addr参数,这是申明,一个结构体。
asd.sin_family = AF_INET; //设置结构体,必须是:AF_INET
asd.sin_port = htons(); //指定TCP或UDP通信服务端口号,htons函数将主机无符号短整型转换成网络字节顺序,1990是本地监听的端口号。
asd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //INADDR_ANY表示所有可用地址
if (connect(sList, (sockaddr*)&asd, sizeof(asd)) == SOCKET_ERROR)
{
cout<<"connect error\n";
closesocket(sList);
;
}
char *buff = "我是来自客户端的信息";
int nAddrlen = sizeof(asd);
];
send(sList, buff, strlen(buff), );
, );
)
{
revData[ret] = 0x00;
cout << revData;
}
closesocket(sList);
WSACleanup();
system("pause");
;
}
TCP通信的更多相关文章
- 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版
目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...
- JAVASE02-Unit010: 多线程基础 、 TCP通信
多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- NetworkComms V3 使用TCP通信传递IList<T>类型的数据
客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...
- [C语言]一个很实用的服务端和客户端进行TCP通信的实例
本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...
- ACE_linux:TCP通信
1.涉及类 ACE_INET_Addr//ACE网络地址ACE_SOCK_Acceptor//ACE网络服务器ACE_SOCK_Connector//ACE网络客户端ACE_SOCK_Stream// ...
- 异步tcp通信——APM.Server 消息推送服务的实现
消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...
- 异步tcp通信——APM.ConsoleDemo
APM测试 俗话说麻雀虽小,五脏俱全.apm虽然简单,但是可以实现单机高性能消息推送(可以采用redis.kafka等改造成大型分布式消息推送服务器). 测试demo: using System; u ...
- 异步tcp通信——APM.Core 服务端概述
为什么使用异步 异步线程是由线程池负责管理,而多线程,我们可以自己控制,当然在多线程中我们也可以使用线程池.就拿网络扒虫而言,如果使用异步模式去实现,它使用线程池进行管理.异步操作执行时,会将操作丢给 ...
随机推荐
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- Intellij idea添加单元测试工具
1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...
- C#为IE编写BHO插件心得
啥是BHO,其实大家都用过,没听过只是没在意而已,来张图你就知道是什么了 是不是很熟悉,就是这么个玩意~~ 先说说我要用来干嘛~我们有个库,里面数据很全面,但是某个部门需要在第三方的B/S系统录入某些 ...
- ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- 【转】为什么我们都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- from表单提交数据之后,后台对象接受不到值
如果SSH框架下,前段页面通过from表单提交数据之后,在后台对象显示空值,也就是接收不到值得情况下.首先保证前段输入框有值,这个可以在提交的时候用jQuery的id或者name选择器alert弹出测 ...
- 全网独家MongoDB Certified DBA Associate考试认证视频
该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...
- Linux基础介绍【第一篇】
Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...
- photoshop:无法完成请求 因为暂存盘已满
今天photoshop打开一个问题,提醒:无法完成请求因为暂存盘已满 不用担心这个问题很好解决可能是你做的图比较大并不需要清理C盘空间 选择:编辑→首选项→暂存盘 设置第一暂存盘为D盘或E盘 总之 第 ...