windows下socket编程小例子

服务端

    1. 首先引进头文件winsock2.h和库文件ws2_32.lib(开发环境为vs2015)
    2. 加载套接字库和创建套接字
    3. 绑定套接字到一个IP地址和端口上
    4. 监听客户端发来的连接请求
    5. 接收或发送信息
    6. 关闭套接字,套接字库

客户端

    1. 首先引进头文件winsock2.h和库文件ws2_32.lib(开发环境为vs2015)
    2. 加载套接字库,创建套接字对象
    3. 向服务端发出连接请求
    4. 收发信息
    5. 关闭套接字和套接字库

注释

WSAStartup结构体中主要包含了系统所支持的Winsock版本信息

WSAstartup()用于初始化Windows sockets,并返回WSADATA结构体,只有调用了该函数后,程序才能调用其他WIndows sockets api函数,实现网络通信。函数第一个参数为版本号,第二个用于接收返回的WSADATA结构体。

SOCKET PASCAL FAR socket(int af, int type, int protocol);   该调用要接收三个参数:af、type、protocol。参数af指定通信发生的区域,: WINDOWS中仅支持AF_INET,它是网际网区域。参数type 描述要建立的套接字的类型。这里分三种:一是TCP流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制,二是数据报式套接字(SOCK_DGRAM)提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。三是原始式套接字 (SOCK_RAW)该接口允许对较低层协议,如IP、ICMP直接访问。参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。

int bind(int socket, struct socketaddr *address, int addr_len) 功能:将创建的 socket 与 adress (包含 IP和port信息)绑定。 返回值:正常情况返回0,在错误的时候会返回-1 参数 socket 描述将使用的套接字。 参数 addr_len 描述的是参数 adress的长度。 参数 adress 描述将绑定的地址。

int listen(int socket, int backlog) 功能:定义在指定的 Socket 上可有多少个待处理的连接。 返回值:在发生错误时返回-1。 参数socket 是调用 socket() 返回的套接口文件描述符。 参数backlog 是在进入队列中允许的连接数目。

int accept(int socket, struct socketaddr *address , int addr_len) 功能:接收客户端连接请求。 返回值:如果连接成功, 函数将返回一个新的套接口文件描述符。接下来,就可以对这个描述符进行发送 (send()) 和接收 (recv()) 操作了。错误时返回-1

参数socket :套接口文件描述符。 参数address struct: sockaddr_in 的指针。 参数addrlen: 长度,常为 sizeof(struct sockaddr_in)

int connect(int socket, struct sockaddr *serv_addr, int addrlen) 功能:在客户端被用于连接到服务器。 返回值:发生错误的时候返回-1 参数socket 套接口文件描述符。 参数serv_addr 包含是服务器的地址和端口信息 参数addrlen 长度,常为 sizeof(struct sockaddr_in)

大致流程:

参考自:

http://www.cnblogs.com/Sniper-quay/archive/2011/06/22/2086636.html

时间: 2024-07-29 11:24:42

windows下socket编程小例子的相关文章

一个linux下socket编程的例子,client连server

关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函数,如果客户端一直没有连接,则服务端阻塞在accept()函数处. 以下是client代码 //============================================================================ // Name : client.cpp // A

windows下socket编程实现client和server双向通信

服务端代码server.c // server.cpp : Defines the entry point for the console application. // #include <stdio.h> #include <Winsock2.h> //Socket的函数调用 #include <windows.h> #define BUF_SIZE 6400 // 缓冲区大小 #pragma comment (lib, "ws2_32") //

【网络】Windows 下 socket 编程范例

1 #include "winsock2.h" 2 #include <stdint.h> 3 #include <stdio.h> 4 5 #include <ctype.h> 6 #include <time.h> 7 8 #define MAX_BUF_LEN 1024 9 10 #define ERR (-1) 11 #define OK 0 12 13 enum { 14 TCP = 6, 15 UDP = 17, 16 };

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

初探WINDOWS下IME编程

初探WINDOWS下IME编程作者:广东南海市昭信科技有限公司-李建国 大家知道,DELPHI许多控件有IME属性.这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现.下面说一下本人对IME的研究结果,并提供示例工程供大家参考: 下载示例工程 10.6K 本文示例程序运行结果如上图1.将用到的API RegOpenKey:打开注册表一键RegQueryValue:查询一键值RegQueryValueEx:同上RegCloseKey:关闭打开的键 LoadKeyboardLay

Linux下Socket编程

http://blog.chinaunix.net/uid-20733992-id-3450058.html 原文地址:Linux下Socket编程 作者:yulianliu1218 Linux下Socket编程 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面

Linux下Socket编程的端口问题( Bind error: Address already in use )

Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120和ps aux |grep 5120都还能看到刚才用Ctrl+C“强制结束”了的进程,端口还是使用中,只好每次用kill结束进程,

Linux下socket编程基本知识

本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linux网络编程 Linux网络编程|人工智能物联网 1.概念 1.1套接字(socket) Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段. Linux中的网络编程通过socket接口实现,socket既是

python速成第二篇(小爬虫+文件操作+socket网络通信小例子+oop编程)

大家好,由于前天熬夜写完第一篇博客,然后昨天又是没休息好,昨天也就不想更新博客,就只是看了会资料就早点休息了,今天补上我这两天的所学,先记录一笔.我发现有时候我看的话会比较敷衍,而如果我写出来(无论写到笔记本中还是博客中,我都有不同的感觉)就会有不同的想法,我看书或者看资料有时候感觉就是有一种惰性,得过且过的感觉,有时候一个知识想不通道不明,想了一会儿,就会找借口给自己说这个知识不重要,不需要太纠结了,还是去看下一个吧,然后就如此往复下去,学习就会有漏洞,所以这更加坚定了我写博客来记录的想法.