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. PHP 新建动态类的代码

    $testObject=(object)array(); $testObject->first="firstValue"; var_dump($testObject); $t ...

  2. no symbol version for module_layout

    内核模块编译helloworld: no symbol version for module_layout, 尝试各种解决办法, 都没搞定, 版本也是对的. dmesg提示no symbol vers ...

  3. 设计模式 策略-Strategy,装饰-Decorator,观察者-Observer

    重温了Head First 3个设计模式.提炼一下思想,笔记如下. 策略-Strategy 当一个类或类族中重复实现某些同类的方法(behavior)时,考虑使用策略模式. 该模式是将Behavior ...

  4. flappy pig小游戏源码分析(1)——主程序初探

    闲逛github发现一个javascript原生实现的小游戏,源码写的很清晰,适合想提高水平的同学观摩学习.读通源码后,我决定写一系列的博客来分析源码,从整体架构到具体实现细节来帮助一些想提高水平的朋 ...

  5. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  6. HDU5875:Function

    题目链接: Function 分析: icpccamp里的方法不会,我用了一个nex[]数组存储当前点ai需要取模的下一个点aj的编号j,如果aj>ai,就不用遍历. 时间为920ms 代码: ...

  7. Lync激活用户遇到ConstraintViolationNoLeadingOrTrailingWhitespace错误

    启用用户的时候出现错误ConstraintViolationNoLeadingOrTrailingWhitespace,如下图 解决方案:域控中,该用户的名字最后多出了个空格,批量生成域用户的脚本问题 ...

  8. 无线网WEP的安全测试及防范

    650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/att ...

  9. 麒麟OS剽窃

    今年对于我们的IT行业来说可以算是耻辱的一年. 首先是“汉芯丑闻”,上海交大研制了一个所谓的国内第一个完全拥有自主知识产 权的DSP芯片(数字信号微处理器)——“汉芯”,研制人陈进教授以此领取政府一亿 ...

  10. Represent nil with NSNull

    [Represent nil with NSNull] It’s not possible to add nil to the collection classes described in this ...