Windows Socket+TCPserverclient


     Winsock是 Windows下套接字标准

         Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能。

例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZWNvZGVsZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

套接字通过IP地址,Portport号标识,通过这个标识能够在整个局域网定位一个套接字。通过套接字进程便能够相互数据传输。如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,port号唯一标识的套接字,进程B相同创建一个有IP地址,port号唯一标识的套接字,进程A。B便能够通过对方套接字发送与接收信息。
        TCP提供是可靠的传输数据服务,通过TCP套接口函数使用。
         1.库支持:


          Winsock
API 函数由WS2_32.DLL支持,可通过WS2_32.LIB訪问。

Windows socket编程前须要初始化WS2_32.DLL。通过han函数WSAStartup完毕初始化。

         #include <winsock2.h> 
         #pragma comment(lib,"ws2_32.lib")  //静态载入ws2_32.lib
WS2_32.DLL 初始化:
         int  WSAStartup(WORD wVersionRequested,LPWSADATA
lpWSAData);
         该函数第一个參数为WS2_32.DLL版本号,通常设为MAKEWORD(2,0)。第二个參数为一个指向WSADATA的指针,用于返回WS2_32.DLL的配置信息。Socket编程前须要调用该函数。
WS2_32.DLL 释放:
         int  WSACleanup(
);
         该函数用于释放WS2_32.DLL。不须要Winsock功能时调用该函数。

 
      
 
       2.TCP基本函数:

创建socket:
         SOCKET  socket (int af, int type,
int protocol);
         第一个參数af:  表示族地址,网络编程一般使用AF_INET宏。
         第二个參数type:  表示连接类型。TCP选面向连接SOCK_STREAM,UDP选数据报SOCK_DGRAM。
         第三个參数protocol:  表示协议,使用AF_INET族地址TCP连接时,设为IPPROTO_TCP。
绑定socket:

         int  bind(SOCKET
s, const struct sockaddr *saddr,int namelen);
         第一个參数:  须要绑定的socket。
         第二个參数:  相应AF_INET。使用struct sockaddr_in包括协议,IP。port等信息。
         第三个參数:  相应AF_INET。使用struct sockaddr_in结构大小。

         该函数将socket与协议,IP,port号绑定起来,相对于给socket“命名”唯一的标识。这样其它的进程就能够通过这个标识找到这个socket。
监听socket:
          int  listen(SOCKET
s,  int nQueueSize);
          第一个參数:  监听的socket。
          第二个參数:  套接字监听队列最大连接请求数。
          该函数将监听对socket的连接请求。
请求连接:

          int  connect(SOCKET
s,const struct sockaddr *saddr,int namelen) ;
          第一个參数:  socket本地进程的socket。

          第二个參数:  相应AF_INET,对方IP,port等socket地址标识sockaddr_in。

          第三个參数:  相应AF_INET,使用sockaddr_in结构大小。

接受连接请求:

          SOCKET  accept(SOCKET
s,  struct sockaddr  *addr,  int  *addrlen);
          第一个參数:  socket为被监听的socket。

          第二个參数:  相应AF_INET,一个sockaddr指针。将写入发送请求方的sockaddr_in信息。
          第三个參数:  相应AF_INET,sockaddr_in结构体的大小。
          该函数用于接受一个socket连接请求,返回一个新的连接socket(实质是请求方的socket)。发送与接收数据通过这个连接套socket。

发送数据:
 
        int  send(SOCKET
s, const char *buf,  int len, int flags );
 
        第一个參数:  socket为对方的socket。
 
        第二个參数:  发送数据的缓冲区。
 
        第三个參数:  数据缓冲区大小。

 
        第四个參数:  紧急状态。一般这为0。
 
        该函数用于向对方socket发送数据。成功返回发送数据的大小数。
发送数据:
 
        int  recv(SOCKET
s, char *buf,  int len,  int flags);
          第一个參数:  socket为对方的socket。
          第二个參数:  接收数据的缓冲区。
          第三个參数:  缓冲区大小。

          第四个參数:  紧急状态。一般这为0。
          该函数用于接收对方发送的数据。成功返回发送数据的大小数。
关闭套接字:

          int  closesocket(SOCKET
s);
          參数为socket。
          该函数用于关闭套接字。

3.牛刀小试:

VC6.0中,先执行TCPserver程序,再打开一个VC6.0,执行TCPclient程序。



执行效果:



server端程序:

client程序:

【windows socket+TCPserverclient】的更多相关文章

  1. 【windows socket+HTTPserverclient】

    Windows Socket+HTTPserverclient      Winsock是 Windows下套接字标准.                 1.HTTP协议:          HTTP ...

  2. 【windows socket+UDPserverclient】

    Windows Socket+UDPserverclient      Winsock是 Windows下套接字标准.                    1.UDP socket编程:       ...

  3. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  4. Microsoft SQL Server 【Windows 身份验证】和 【sa】都无法登录的解决方案

    1.修改启动参数:打开[SQL Server 配置管理器(SQL Server Configuration Manager)]→右键[SQL Server(MSSQLSERVER)]属性→高级(Adv ...

  5. 【windows核心编程】IO完成端口(IOCP)复制文件小例

    1.演示内容 文件复制 2.提要 复制大文件时,使用FILE_FLAG_NO_BUFFERING标志 同时需要注意: 读写文件的偏移地址为 磁盘扇区 的整数倍 读写文件的字节数为 磁盘扇区 的整数倍 ...

  6. 【windows核心编程】一个API拦截的例子

    API拦截 修改PE文件导入段中的导入函数地址 为 新的函数地址 这涉及PE文件格式中的导入表和IAT,PE文件中每个隐式链接的DLL对应一个IMAGE_IMPORT_DESCRIPTOR描述符结构, ...

  7. 【windows核心编程】DLL相关(3)

    DLL重定向 因为DLL的搜索路径有先后次序,假设有这样的场景:App1.exe使用MyDll1.0.dll, App2.exe使用MyDll2.0.dll, MyDll1.0 和 MyDll2.0是 ...

  8. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  9. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

随机推荐

  1. ps闪闪发光的字 教程+自我练习

    本教程的文字效果非常经典.不仅是效果出色,创作思路及制作手法都堪称完美.作者并没有直接使用纹理素材,纹理部分都是用滤镜来完成.这需要很强的综合能力,非常值得学习和借鉴.最终效果 我的: 1.创建一个新 ...

  2. django 搭建自己的博客

    原文链接:http://www.errdev.com/post/4/ 每一个爱折腾的程序员都有自己的博客,好吧,虽然我不太喜欢写博客,但是这样骚包的想法却不断涌现.博客园虽好,可以没有完全的掌控感,搭 ...

  3. 【转】B树、B-树、B+树、B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  4. -ms-viewport的问题

    Windows 8 中的 Internet Explorer 10 和 Windows Phone 8 Internet Explorer 10 doesn't differentiate devic ...

  5. vs2012 密匙

    旗舰版 YKCW6-BPFPF-BT8C9-7DCTH-QXGWC

  6. css3 动画demo

    1)http://www.yyyweb.com/demo/css-cokecan/inner.html 2)页面切换效果demo http://www.yyyweb.com/demo/page-tra ...

  7. ios和android一并学习的体会

    如果说为什么要同时学习这两种不同的移动平台,其实有一定的“闲”的因素在里面. 相对于ios,android我是早半年接触的.最开始学习的时候也就是j2ee学习的延续,通过看视频连带看书学了大概一个月的 ...

  8. Data Binding in WPF

    http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S1   Data Binding in WPF John Papa Code downl ...

  9. 移动端翻页插件dropload.js(支持Zepto和jQuery)

    一. 声明 代码来源:github上的dropload项目. 二. 问题 dropload.js提供了最基本的上拉翻页,下拉刷新功能.对于由服务端一次返回所有数据的情况基本通用. 但是,需求往往不是服 ...

  10. linux环境新增用户和所属组

    1.查看用户和组信息命令: 1.1 cat /etc/passwd /etc/passwd 存储有关本地用户的信息. 1)username        UID到名称的一种映射,用户名 2)passw ...