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

本文介绍了套接字编程的基础知识,包括套接字的概念、端口与端口号的作用、流套接字与数据包套接字的区别,以及TCP/IP协议的核心。此外,还详细讲解了套接字编程的一般流程,如创建套接字、绑定套接字、监听套接字等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值