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);
套接字编程的流程大概就是这样。
分享到:
相关推荐
win CE 虚拟键盘-DisplaySIP
Win CE 6.0 模拟器
WIN CE资源管理器
Windows Ebedded CE6.0 SP1.msi 是用作Windows Ebedded CE6.0 SP1.msi的补丁之用
Win ce 的模拟器 Win ce 的模拟器
win ce同步软件(win 7)
Win CE 上的WIN8主题 导航用一机多图
束时,我们打算对各种套接字模式以及I / O模型的优缺点进行总结。同时,帮助大家判断到底 哪一种最适合自己应用程序的要求。 所有Wi n d o w s平台都支持套接字以锁定或非锁定方式工作。然而,并非每种平台都支持 每...
很好学的win ce驱动开发教程
可以让车载导航进入CE系统桌面,管理文件,调用其它版本的导航进进测试
win ce 6.0基于PXA270 实验教程
win ce 模拟器 wince5.0 运行效果还可以
老古董的WIN CE同步软件,与Microsoft ActiveSync 配合使用,可以实现Win CE与PC连接,数据交换。
在windows系统的win CE5.0模拟器
WIN_CE计算器
这是便携式打印机开发时候用到的,适用于WIN CE的VC#2008的开发
基于win ce的贪吃蛇游戏的开发 . 起初贪吃蛇蛇身为1节,贪吃蛇按照原来的方向行进直到通过按键改变贪吃蛇的行进方向。 在屏幕上绘制贪吃蛇,在他们的四周绘制四面墙和障碍物,蛇身在行进的过程中不能碰到墙壁和障碍...
针对大客户采用北电CE+ATM实现高速以太网专线组网
WIN7(32位) 微软WIN CE同步MicrosoftActiveSync6.1
《Win CE 程序设计》实验指导手册. 实验一:开发平台构建与系统定制。