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. 谈谈final、finally和finalize

    final: final为修饰符, 如果类被声明为final,则不能派生新子类. 如果变量被声明为final,则必须在声明时初始化,在以后的引用只能读取,不可修改. 如果方法被final声明,则只能使 ...

  2. 二叉树单色路径最长&amp;&amp;穿珠子

    对树的操作,特别理解递归的好处. //对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的 //另一点结束而形成的路径,而路 ...

  3. hadoop的ganglia数据监控

    如果我们想知道当前运行的hadoop集群的状态,可以通过hadoop的客户端和web页面来获得,但是如果我们想知道当前集群的繁忙程度,如读写次数,这些工具就办不到了.幸运的是hadoop提供了一种ga ...

  4. JQuery发送Put、Delete请求 - 摘自网络

    DELETE: $.ajax({ url: '/script.cgi', type: 'DELETE', success: function(result) { // Do something wit ...

  5. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  6. Fast-paced Multiplayer

    http://www.gabrielgambetta.com/fpm1.html —————————————————————————————————————————————————————— Fast ...

  7. FATFS文件系统

    STM32移植文件系统,操作SD卡,对SD卡进行读写 FATFS文件系统与底层介质的驱动分离开来,对底层介质的操作都要交给用户去实现,它仅仅是提供了一个函数接口而已,函数为空,要用户添加代码.然后 F ...

  8. ASP.NET前台AJAX方法调用后台的方法写法

    前台: <input id="AjaxDemo" type="button" onclick="get()" value=" ...

  9. .net 配置ueditor

    添加引用如下: <script src="../Ueditor/ueditor.config.js" type="text/javascript"> ...

  10. HDU 4870Rating(推公式)

    有关这个题的高斯消元的方法已经在我的另一篇博客中给出http://www.cnblogs.com/gj-Acit/p/3888382.html 这里介绍一个很吊的解法,复杂度降到了O(n),以下转自h ...