小弟刚涉及socket编程,有些概念还想明确一下,socket编程 与 tcp/ip到底是个什么关系?
比如TCP提供了很多机制,封装、解包、重传,滑动窗口、等,这些需要靠socket去实现吗,还是说由操作系统的TCP/IP模块去实现的?网上说是TCP/IP 只是个协议债,必须要靠socket去实现,这话对不对?
我看了一些socket编程的书,无非就是建立连接、释放连接、控制连接 这几样东西,哪位兄弟能把这两者的关系以及功能界线详细说一下,不甚感谢,我正处于迷茫阶段,呵呵

解决方案 »

  1.   


    支持。TCP/IP 只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如 Win32 编程接口一样, TCP/IP 也必须对外提供编程接口。socket可以看作实现应用层所用的接口,而且socket不一定建立在tcpip协议上的。
      

  2.   

    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM)TCP,数据报套接字UDP(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。
    在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。
    服务器端编程的步骤:
    1:加载套接字库,创建套接字(WSAStartup()/socket());
    2:绑定套接字到一个IP地址和一个端口上(bind());
    3:将套接字设置为监听模式等待连接请求(listen());
    4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
    5:用返回的套接字和客户端进行通信(send()/recv());
    6:返回,等待另一连接请求;
    7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
    socket sockSrv=socket(AF_INET,SOCK_STREAM,0); //这就是一个tcp的套接字 wVersionRequested = MAKEWORD( 1, 1 );//建立版本
    err = WSAStartup( wVersionRequested, &wsaData );//启用socket
    if ( err != 0 ) //如果返回值不等于0,那么表示出错,直截退出程序
    {
    return 0;
    }
    sockSrv=socket(AF_INET,SOCK_STREAM,0);    //设置为TCP流模式

    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);            //INADDR_ANY为本机任意IP
    addrSrv.sin_family=AF_INET;                                                //
    addrSrv.sin_port=htons(6000);                                                //侦听端口为6000

    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));    //绑定到SOCKET
    listen(sockSrv, 5);                                    //侦听sockSrv,并设置最大客户连接数为5。

    SOCKADDR_IN addrClient;           
    int len=sizeof(SOCKADDR); apapp->m_socket=accept(sockSrv,(SOCKADDR*)&addrClient,&len); //等待客户连接,如果没有客户连接时,则此函数在这里会产生阻塞。//服务器监听状态,当有客户端请求 才会继续向下运行,比如传输数据之类的等等。
      

  3.   

    其实他已经帮你封装好了,你只需要选择 SOCK_STREAM 接下来的那些send(),recv()函数发送数据就是tcp协议发送的,这样可以保证你的数据不会丢失
      

  4.   

    socket编程就是网络编程,网络编程涉及到的协议很多TCP/IP/ARP等等有的是应用层的协议,如FTP/HTTP
      

  5.   

    其实lz遇到的问题,我相信每个初学者都会遇到,因为我曾经也有类似的疑惑,对于这样的疑惑,我建议lz动手实践写写socket程序,你的疑惑就会解开的