面向连接的通讯是通过TCP/IP协议来实现的.TCP实现了两台计算机之间可靠数据传输.当应用程序通过TCP通讯时,目标和源计算机之间就建立了一个虚拟连接,一旦连接建立,就可以在目的和源计算机之间进行双向的数据流传输.

服务器API涵数

服务器是一个等待任意数量的客户连接的进程,其目的是为客户请求提供相应的服务.服务器必须用通用的命名对连接进行监听.在TCP/IP中,命名就是本地接口的IP地址和端口号.每一个协议都有着不同的寻址方式,因此其命名方法也不同.在Winsock编程中,第一步就是要调用socket或WSASocket并将Socket绑定到通用命名的协议.绑定是通过API方法bind完成的.接下来,将socket通过API函数listen设置为监听模式.最后当客户试图连接时,使用API函数accept或WSAAccept接受接连.

绑定

一旦特定的协议被创建,你必须把它绑定到公开的地址,API函数associates将socket与公开的地址关联,其函数声明如下:

int bind(
    SOCKET                     s,
    const struct sockaddr FAR* name,
    int                        namelen
);

参数说明:

s:表示等待客户连接的socket.
    name:是一个sockaddr结构, 你必须用使用的协议进行填充,并转换为sockaddr结构.Winsock的头文件将sockaddr结构定义为SOCKADDR类型. 
    namelen:是指定了协议的地址结构的长度.
 
    下面的示例说明了如何在TCP中使用bind:

SOCKET               s;    
    SOCKADDR_IN          tcpaddr;
    int                  port = 5150;

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

tcpaddr.sin_family = AF_INET;
    tcpaddr.sin_port = htons(port);    
    tcpaddr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(s, (SOCKADDR *)&tcpaddr, sizeof(tcpaddr));

上例中,一个流socket被创建,接下来设置了用来接受客户连接的TCP/IP地址结构.在这个例子中,socket被绑定到了一个默认的特殊地址 -- INADDR_ANY,并占用了端口号5150.我们可以明确地指定一个IP地址,但INADDR_ANY充许我们绑定到系统中所有可用的接口,这样客户通过任意接口(当然端口号要正确)进行连接都会被我们的监听socket接受.调用bind通常使用本地IP和端口与socket建立关联.

一旦出错, bind将返回SOCKET_ERROR. bind通常产生的错误是WSAEADDRINUSE.在TCP/IP中, WSAEADDRINUSE表示另外的进程已经绑定了本地IP与端口或者指定的IP与端口处于TIME_WAIT状态.如果你对已经绑定的socket调用bind就会返回WSAEFAULT.

转载于:https://www.cnblogs.com/MaxWoods/archive/2007/09/09/887839.html

Winsock编程入门 -- 4.面向连接的通讯相关推荐

  1. 非阻塞模式WinSock编程入门(Socket关联窗口消息机制)

    本文版权归 CSDN trcj 所有,转载请自觉按如下方式于明显位置标明原作者及出处,以示尊重! 作者:trcj 原文:http://blog.csdn.net/trcj1/archive/2010/ ...

  2. 非阻塞模式WinSock编程入门

    介绍 WinSock是Windows提供的包含了一系列网络编程接口的套接字程序库.在这篇文章中,我们将介绍如何把它的非阻塞模式引入到应用程序中.文章中所讨论的通信均为面向连接的通信(TCP),为清晰起 ...

  3. Winsock编程原理——面向连接

    Winsock编程原理--面向连接 Windows Sockets使用套接字进行编程,套接字编程是面向客户端/服务器模型而设计的,因此系统中需要客户端和服务器两个不同类型的进程,根据连接类型的不同,对 ...

  4. linux c语言 ppt,linux操作系统下c语言编程入门.ppt

    linux操作系统下c语言编程入门.ppt Linux操作系统下C语言编程入门 CNT Linux操作系统简介基础知识进程介绍文件操作时间概念消息管理线程操作网络编程Linux下C开发工具介绍 一 L ...

  5. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  6. linux操作系统下c语言编程入门

    linux操作系统下c语言编程入门  整理编写:007xiong  原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux ...

  7. 【转贴】linux操作系统下c语言编程入门

    [转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...

  8. Linux网络编程 入门

    Linux网络编程入门 (转载) (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...

  9. 广播通信设计——WinSock编程(QT界面)

    广播通信设计 一.设计要求 设计要求是通过学习winSock API编程,实现局域网消息广播的应用程序. 系统采用CS架构的方式,具有服务端和客户端.完成的功能有私聊.群聊和私聊时的文件传输,私聊和文 ...

  10. Java面向对象程序开发——网络编程入门知识

    目录 七.网络编程入门知识 软件结构 网络通信协议 协议分类 网络编程三要素 TCP通信程序 概述 Socket类 构造方法 成员方法 ServerSocket类 构造方法 成员方法 简单的TCP网络 ...

最新文章

  1. 入门|机器学习中常用的损失函数你知多少?
  2. 微信小程序图片上传(文字识别)
  3. [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]
  4. php面试php数组变ahp,关于PHP字符串的一道面试题
  5. scrapy FormRequest
  6. 参数默认值,剩余参数,拓展参数(default spread rest parameter)
  7. python-property、docstring--笔记
  8. 拆装智伴机器人_智伴机器人软件下载-智伴下载 v4.2.8-pc6智能硬件网
  9. 内网环境中公网域名解析成内网地址的问题
  10. SEO利器 - 网页内容监控之百度自动推送
  11. 如何清除html的浏览器缓存,如何清除浏览器缓存,小编教你怎么清除浏览器缓存...
  12. 五、 线性判别分析 LDA
  13. 计算机分区硬盘有写保护,磁盘被写保护怎么办?总结几种去掉磁盘写保护的方法...
  14. 内核block层IO调度器—bfq算法深入探索2
  15. 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)
  16. 通过安卓手机,获取微信小程序包进行反编译方法
  17. 【OBS】VS调试启动exe的环境设置
  18. 嵌入式未来趋势是什么?
  19. 怎么关闭win10自动更新?我们可以这么做!
  20. java中excel文件的导入,限制上传的文件类型,文件的大小,显示上传文件的进度条...

热门文章

  1. 2020校招薪酬大比拼,PDD好猛!旧人没有新人香,你被倒挂了没?
  2. 干货:资深架构师教你一篇文看懂Hadoop
  3. 29 条运维工程师必会实用 Linux 命令
  4. 90后IT男被准丈母娘拒绝:家境不重要,重要的是…戳中痛处
  5. js 运行中断停止_如何终止JS继续运行??
  6. 白话文阐述openTSDB
  7. 软件系统架构师大概工作过程
  8. css案例学习之父子块的margin
  9. 学习是一件高尚而孤独的事情
  10. windows 下 YII2 配置 memcache