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. WCF_Config頁面常用配置

    右键点击App.config文件,选中Edit WCF Configuration进行编辑,我们添加2个baseAddress,一个是基于HTTP协议的:一个是基于TCP协议的.同时添加2个bindi ...

  2. 32+激发灵感的HTML5/CSS3网页设计教程

      HTML5是寄托在HTML4基础上取得了的广泛成就.这不仅意味着你不必完全放弃现有的一些标记,而是可以借鉴,以加强 它. CSS3也以同样的方式在互联网内容的安排下,提供了它的柔韧性.CSS3是开 ...

  3. [转] Python自动单元测试框架

    一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software ...

  4. iOS 检测有没有安装其它应用 和ios9下要注意的地方

    UIApplication *app = [UIApplication sharedApplication]; NSURL *url = [NSURL URLWithString:@"Tri ...

  5. dom 关键字提示

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 关于对javascript 提升概念 的总结与思考。

    最近在看一本新买的书叫<你不知道的javascript上卷>..买到这本书也算是个巧合 不过真是物有所值.它对js的几个高级概念都做了非常深刻的描述和通过一些通俗易懂的方式来让我们理解.这 ...

  7. HD1000A + B Problem

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  8. java反射工具类

    package com.yingchao.kgou.core; import java.lang.reflect.Field; import java.lang.reflect.InvocationT ...

  9. POJ2155Matrix(二维线段树)

    链接http://poj.org/problem?id=2155 题目操作就是说,每次操作可以是编辑某个矩形区域,这个区域的0改为1,1改为0,每次查询只查询某一个点的值是0还是1. 方法:二维线段树 ...

  10. C:指针、数据类型、格式化输入输出、输入函数的坑点

    指针.数据类型.格式化输入输出.输入函数的坑点 有时候我们迷茫的时候,坚持就是最好的选择. 1.指针的分类为什么很重要? 参考 答:因为指针会根据相应的类型取对应长度的数据,类型决定所取数据的长度.如 ...