小弟刚涉及socket编程,有些概念还想明确一下,socket编程 与 tcp/ip到底是个什么关系?
比如TCP提供了很多机制,封装、解包、重传,滑动窗口、等,这些需要靠socket去实现吗,还是说由操作系统的TCP/IP模块去实现的?网上说是TCP/IP 只是个协议债,必须要靠socket去实现,这话对不对?
我看了一些socket编程的书,无非就是建立连接、释放连接、控制连接 这几样东西,哪位兄弟能把这两者的关系以及功能界线详细说一下,不甚感谢,我正处于迷茫阶段,呵呵
比如TCP提供了很多机制,封装、解包、重传,滑动窗口、等,这些需要靠socket去实现吗,还是说由操作系统的TCP/IP模块去实现的?网上说是TCP/IP 只是个协议债,必须要靠socket去实现,这话对不对?
我看了一些socket编程的书,无非就是建立连接、释放连接、控制连接 这几样东西,哪位兄弟能把这两者的关系以及功能界线详细说一下,不甚感谢,我正处于迷茫阶段,呵呵
支持。TCP/IP 只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如 Win32 编程接口一样, TCP/IP 也必须对外提供编程接口。socket可以看作实现应用层所用的接口,而且socket不一定建立在tcpip协议上的。
在这个程序中,将两个工程添加到一个工作区。要链接一个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); //等待客户连接,如果没有客户连接时,则此函数在这里会产生阻塞。//服务器监听状态,当有客户端请求 才会继续向下运行,比如传输数据之类的等等。