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. s3c2440串口裸板驱动(使用fifo)

    使用fifo的好处有: 1:串口的数据发送的数据量较大时,使用fifo可以大大降低MCU的开销.(有点类似串入并出的cput处理模型,本质上还是串行收发) 2:在某些特殊场合,例如制定较复杂的协议时, ...

  2. Android教程说明-夜神模拟器连接IDE更新让Delphi发现你的手机或夜神模拟器

    相关资料: [深圳]jiuk 发布 1.官网下载模拟器http://www.bignox.com/并运行 2.打开开发者选项刚开始是看不到的->关于平板电脑->多点几次版本号->打开 ...

  3. HDU 5458 Stability (树链剖分+并查集+set)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 给你n个点,m条边,q个操作,操作1是删边,操作2是问u到v之间的割边有多少条. 这题要倒着做才 ...

  4. java解析属性文件

    -----------------------解析属性文件----------------------------- /**   * 获取src下属性文件   * @param params   * ...

  5. OC:copy 与 retain 的区别

    copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象 ...

  6. CANBus Determining Network Baud Rate, Automatic bit-rate detection

    http://www.canbushack.com/blog/index.php?title=determining-network-baud-rate Determining Network Bau ...

  7. uva301 - Transportation

      Transportation Ruratania is just entering capitalism and is establishing new enterprising activiti ...

  8. uva129 - Krypton Factor 7.4.3 困难的串

      7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstrin ...

  9. ArcSDE 10.2建立SDE服务

    从ArcGIS 10.1开始,arcgis官方推荐以直连方式连接SDE,因此在SDE安装时不再自动安装SDE服务,以下是手动安装SDE服务的方法 环境 服务端: oracle 11.2 64位,Arc ...

  10. 关于Collection'

    ---恢复内容开始--- 众所周知在我们使用Java中的类的存储的时候经常会使用一些容器,链表的概念,本文将彻底帮您弄清链表的各种概念和模型!!!!注 意理解哦~~~ 大致框架如下: ----> ...