网络编程1-初探winSocket
网络编程1
概述
参考书籍为《TCP/IP网络编程》,这个书写的比较基础,在看过很多参考书籍以后绝对这本适合用来作为网络编程的入门书籍。
本次初次编写简单的网络,直接把下面的代码自己敲一遍,然后跑起来就行,首先让自己有一个大概的了解即可。代码在Windows下VS2015运行。
服务端编写
#include <Winsock2.h>
#include <Ws2tcpip.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
void main()
{//定义相关的数据int iPort = 5050;WSADATA wsaData;SOCKET sListen, sAccept;int iLen;int iSend;char buf[] = "I am a server";struct sockaddr_in ser, cli;std::cout << "----------------------------\n";std::cout << "Server waitting\n";std::cout << "----------------------------\n";//启动winSocketif (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {std::cout << "Failed to load Winsock.\n";return;}//创建SocketsListen = socket(AF_INET, SOCK_STREAM, 0);if (sListen == INVALID_SOCKET) {std::cout << "socket() Failed:" << WSAGetLastError() <<"\n";return;}//绑定IP地址ser.sin_family = AF_INET;ser.sin_port = htons(iPort);ser.sin_addr.s_addr = htonl(INADDR_ANY);if (bind(sListen, (LPSOCKADDR)&ser, sizeof(ser)) == SOCKET_ERROR) {std::cout << "bind() Failed\n";return;}//监听if (listen(sListen, 5) == SOCKET_ERROR) {std::cout << "listen() Failed\n";return;}//接受连接和发送欢迎信息iLen = sizeof(cli);while (true) {sAccept = accept(sListen, (struct sockaddr*)&cli, &iLen);if (sAccept == INVALID_SOCKET) {std::cout << "accept() Failed\n";break;}char clibuf[20] = { '\0' };inet_ntop(AF_INET, (void*)&cli.sin_addr, clibuf, 16);std::cout << "Accept client IP:" << clibuf << ":" << ntohs(cli.sin_port) << std::endl;iSend = send(sAccept, buf, sizeof(buf), 0);if (iSend == SOCKET_ERROR) {std::cout << "send() Failed\n";break;}else if (iSend == 0) {break;}else {std::cout << "Send byte:" << iSend << std::endl;std::cout << "----------------------------------\n";}closesocket(sAccept);}closesocket(sListen);WSACleanup();
}
客户端
#include <Winsock2.h>
#include <WS2tcpip.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
void main()
{//定义相应的数据WSADATA wsaData;SOCKET sClient;int iPort = 5050;int iLen;char buf[1024];struct sockaddr_in ser;//启动 winSocketmemset(buf, 0, sizeof(buf));if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {std::cout << "Failed to load Winsock\n";system("pause");return;}//创建Socketser.sin_family = AF_INET;ser.sin_port = htons(iPort);char addr[20] = { '\0' };std::cin >> addr;inet_pton(AF_INET, addr, (void*)&ser.sin_addr.s_addr);sClient = socket(AF_INET, SOCK_STREAM, 0);if (sClient == INVALID_SOCKET) {std::cout << "socket() Failed\n";system("pause");return;}//连接并进行简单的操作if (connect(sClient, (struct sockaddr*)&ser, sizeof(ser)) == INVALID_SOCKET) {std::cout << "connect() Failed\n";system("pause");return;}else {iLen = recv(sClient, buf, sizeof(buf), 0);if (iLen == 0) {system("pause");return;}else if (iLen == SOCKET_ERROR) {std::cout << "recv() Failed\n";system("pause");return;}std::cout << "recv() data from server:" << buf << std::endl;}closesocket(sClient);WSACleanup();system("pause");
}
连接
先使用 CMD 启动 Windows shell,输入 ipconfig 查看 本地的 IP 地址,如果启动的客户端输入刚才的地址,就可以实现连接了
网络编程1-初探winSocket相关推荐
- 【网络编程】之一、初识WinSocket
Winsock是Windows下的网络编程接口,它是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口. Winsock在常见的Windows平台上有两个主要的版本,即Wins ...
- linux多网卡网络编程,Linux网络编程之Socket初探
Socket由来 Socket 的英文原意就是"孔"或"插座",现在,作为 BSD UNIX 的进程通讯机制,取其后一种意义.一起看下网络编程里说的socket ...
- 基于Winsock API的VC网络编程实战
基于Winsock API的VC网络编程实战 随着计算机信息技术的飞速发展,互联网与人类社会的工作.生活越来越紧密相关,它已经成为人类获取.交流信息的重要途径和手段.所以当前对于开发人员来说,网络编程 ...
- WinSock网络编程实用宝典(一)
一.TCP/IP 体系结构与特点 1.TCP/IP体系结构 TCP/IP协议实际上就是在物理网上的一组完整的网络协议.其中TCP是提供传输层服务,而IP则是提供网络层服务.TCP/IP包括以 ...
- 第十三章:Python の 网络编程进阶(二)
本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...
- 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程
标签:status 传递 windows 返回 修改 队列 _for 响应 关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...
- 网游中的网络编程系列1:UDP vs. TCP
原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...
- Windows网络编程(一)基础
Table of Contents 准备工作 socket C/S模式 源代码 服务端 客户端 源码分析 数据传输 关闭连接 符号解释 WSAStartup sin_family sin_port i ...
- vc 网络编程(socket)TCP/UDP 介绍
在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例.希望对您有所帮助 一.原理部分 在网络编程中最常用的方案便是Client/Serve ...
最新文章
- 一文看懂怎样用 Python 创建比特币交易
- MySQL Workbench 8.0 CE数据库管理基本操作
- 一个游戏客户端文件的字节加解密代码,我花1000元请人解的,存在这,以后应该用得到。...
- 如何保存PDF、Word和Excel文件到数据库中
- HTML语言基础.下
- python字典高级用法_Python 字典的高级用法
- C#利用Socket实现客户端之间直接通信
- python数据分析_使用Python进行数据分析
- C#根据屏幕尺寸大小重新定位控件大小和位置
- 学习pytorch: 语义分割工具
- cookie注入原理详解(一)
- 一些碰到的陌生的技术名词搜集(持续更新……)
- 最好用音频剪辑的软件,使用方法?
- windows7计算机图片,win7照片查看器无法显示图片计算机可用内存不足 需要技巧...
- Code Smell 检测工具调研
- 产品经理OR售前支持
- origin软件画流程图_免费的网络拓扑流程图绘制软件(PaceStar LanFlow)
- 安卓手机重启日志_一加手机CM12安卓5.0版非官方尝鲜版刷机方法介绍【教程】...
- 【资源分享】云计算 CRM 等网上搜集资料
- PSO算法求解全局最大值
热门文章
- [转]httpclient 上传文件、下载文件
- LeetCode OJ - Surrounded Regions
- Chaos网络库(三)- 主循环及异步消息的实现
- ListView.setAdapter(adapter);空指针异常的解决的总结
- Solr部分更新MultiValued的Date日期字段时报错及解决方案:Invalid Date String:‘Mon Sep 14 01:48:38 CST 2015‘
- 快手短视频领域为例的领域数据建设探索
- 【白皮书分享】技术重构社会供应链:未来科技趋势白皮书.pdf(附下载链接)...
- 【干货】深度学习及在推荐中的实践-美团点评.pdf(附下载链接)
- 【干货】2020年研发运营安全白皮书.pdf(附下载链接)
- 解决比特币双重支付问题