`
nathan09
  • 浏览: 145647 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Win CE以太网套接字实验小结

 
阅读更多

1。基础知识:

1)套接字(Socket):可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另一个Socket,使这段信息能传送到本地以外的程序中处理。

2)端口与端口号:端口是网络服务分配的一个信息缓冲区,用于保留Socket中的输入、输出信息,端口是一个16位无符号整数,以区别主机上的不同程序或同一程序内不同位置上的Socket接口,低256的端口号保留给标准应用程序。每个套接字都组合进了IP地址、端口、端口号,这样形成的整体就可以区别不同机器上的不同信息交互双方的位置。

3)流套接字(Stream Socket)与数据包套接字(Datagram Socket):流套接字提供可靠的TCP协议来保证信息正确到达目的地。数据包套接字提供UDP协议不保证信息正确到达目的地。

4)TCP/IP协议的核心:传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。

2、套接字编程流程:

1)启动Winsock(S&C):对Winsock DLL进行初始化,协商Winsock的版本支持,并分配必要的资源。

WSADATA wsaData;
if ( WSAStartup(MAKEWORD(1,1),&wsaData) ) //调用Windows Sockets DLL
{

TEXT("Winsock cannot initialized!");
WSACleanup();
return;
}

2)创建套接字(S&C):

Client = socket( PF_INET,SOCK_STREAM,0 );
if( Client == INVALID_SOCKET )
{

TEXT("Cannot create client socket!");
return;
}

3)绑定套接字(S):将本地地址绑定到所创建的套接字上。

if ( bind( s, (LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr) ) == SOCKET_ERROR )
{

TEXT("Cannot bind the socket!")
return;
}

4)套接字监听(S):服务器可以调用函数使其流套接字s处于监听状态。】

int listen(Socket s, int backlog);

5)等待连接(S):服务器调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字通信。

SOCKET accept(SOCKET s, struct sockadder FAR* addr, int FAR* addrlen);

6)套接字连接(C):将两个套接字连接起来准备通行。

iErrorCode = connect( Client,(LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr) );
if ( iErrorCode == SOCKET_ERROR )
{
TEXT("Connect fail!Reconnect please");
}
else
{
TEXT("Connect success." );

connected = TRUE;
}

7)发送数据(S&C):

if ( send( Client, (char*)m_wchMsg, sizeof(m_wchMsg), 0 ) == SOCKET_ERROR )
{
TEXT("Send msg fail!"));
}

8)接收数据(S&C):应该在一个单独的线程中接收并显示信息!!!!(道理同串口通信实验中的接收线程)

//创建事件,
SockEvt = CreateEvent(NULL,FALSE,FALSE,_T("Connected?"));
if(SockEvt == NULL)
{
TEXT("Cant create event");
}

thread = TRUE;
//创建一个接收字符的函数的线程
ReciveThread = AfxBeginThread(RecStr,(void*)this,THREAD_PRIORITY_NORMAL);

//...........................

UINT RecStr(LPVOID param)
{

iReturn = recv(p->Client,(char*)Rev,BufferSize, 0); //接收字符
if (iReturn == SOCKET_ERROR)
{
TEXT("Receive ERROR!");
}

//在这显示接收到的信息

}

9)中断连接(S&C):通知服务器或客户端停止接收和发送数据。

int shutdown(SOCKET s, int how);

10)关闭套接字(S&C):释放占用的资源。

int closesocket(SOCKET s);

套接字编程的流程大概就是这样。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics