嵌入式的LED点阵显示屏的研究与实现 第15页
7)intsendto(intsoeket,eonstvoid*msg,intlen,unsignedintflags,eonst
surtetsockaddr*ot,initolen)和intrevcrfom(intsockdf,void*buf,intlen,unsigned
intfiags,sturctsokcdadr*rfom,ini*rfomlen)是数据报套接口发送与接收数据的
系统调用,因为数据报套接口是无连接的,它并不连接到远程的主机上,所以
在发送数据包之前,必须首先给出目的地址;
8)close(sockdf)和intshutdown(intsoe附,inthow)调用用来关闭连接的
套接口文件描述符。
2.数据流和数据报通信
数据流套接口和数据报套接口是两种最常用的Iniernet套接口,经常采用
“SOC--KSTREAM”和“SoC凡DGRAM”来代表。数据流套接口是可靠的
面向连接的通信数据流,数据报套接口是按一种应答方式进行数据传输的。
)l数据流通信
整个面向连接的数据流通信的socket编程过程可以用图6一10来表示。
图6一10数据流通信过程
使用数据流进行通信。首先应该在服务器端使用oskceto建立一个通信的
武汉理工大学硕士学位论文
端点,再用bind()命令把一个地址绑定到这个端点上。然后,服务器使用sliten()
侦听连接请求,当远程客户机试图使用ocnnee()t连接llstneo侦听的端口时,连
接将会在队列中等待,直到使用aceePtO处理它。在acPcet()处理了连接请求后,
将会生成一个新的描述这个连接端口的套接字,利用这个套接字就可以发送和
接收数据了。如果slitneo一直没有侦听到连接请求,那么服务器任务就会在
acPceto处阻塞(在阻塞模式下)。
对于客户机任务来说,它也需要先用socke()t建立一个通信端口,但是它
不必用bnid()把一个本地地址绑定到端口上,而是直接使用ocnnecto向指定的
服务器发送连接请求,如果请求被接收,下一步就可以进行数据流通信了。
下面是数据流通信的socket程序,该程序在服务器端指定用于通信的端口
等待客户端的连接,在连接成功后发送“SoeketeoUTnIunication”
/*******月及务器程序TCPSevre.re************/
#inelude<stdlib.h>
#define场AITBUF
intmain(int
{
l0
ehar*时gy【])
intSockdf,newesdf;
sUrtetsoekadd--rinsevre几addr:
surtctsoekadd--rlnelien--taddr:
intsi--nsize,Ponrtmuber;
eharhello[]=,,Hello!Socketeomntunieationworld!n\,,;
i(farge!=2)
{
Pfrini(fsdterr,”Usage:%5Ponrtmube\rn\a,,,agry[0])
exit(l):
}
*/端口号不对,退出*/
i(fP(ortnumbe厂atoi(agry〔1]))<0)
}
/*服务器端开始建立socket描述符*/
i(f(soekdf=soeket(AFes州ET,SOC凡STREAM,0))==一1)
武汉理工大学硕士学位论文
}
*/服务器端填充sockaddr结构*/
bzero(&sevrer一拜ddr,sizeo(fstruetsoekdad--rin));
sevre--raddr’si几afmll厂AFeeNIE毛
*/自动填充主机伊*/
sevre--radd.rsi--nadd.rs一add=rhtoni(NIADD--R八N均:
sevre--radd.rsin-Port=htons印ortnurnbe)r;
*/捆绑oskcdf描述符*/
i(fbind(soekdf,(sturetsoekaddr*)(&sevreresadd)r,sizeo(fsturet
soekaddr))==一1)
{
}
*/监听sockdf描述符*/
i(flisten(soekdf,W人ITBUF)==一1)
{
}
while(l)
{
/*服务器阻塞,直到客户程序建立连接*/
si--nsize=sizeo(fsurtetsoekadd--rin):
i(f(ne--wdf=aeeePt(soekdf,(sUrtetsoekaddr*)(&elientesadd)r,
&si--nsize))一1)
{
}
*/可以在这里加上自己的处理函数*/
Pfrint(fstderr,”Sevrergeteonneetionorfm%sn\,,
ine--t-ntoa(elien--tadd.rsi--n扭ddr));
i(fsendn(e--wdf,hello,sulenh(ello),0)一l)
{
}
*/这个通信己经结束*/
elose(ne--wdf);
*/循环下一个*/
}
close(soekdf):
exit(0):
2)数据报通信
图6一n数据报通信过程
对于数据报通信的服务器端来说,它不必再在一个端口上侦听,以等待建
立连接,而只需要生产一个端口描述符,并且把这个端口描述符绑定到本地地
址上就可以了。对于客户端也是一样。这样整个通信过程就简洁得多。需要说
<< 上一页 [11] [12] [13] [14] [15] [16] 下一页
嵌入式的LED点阵显示屏的研究与实现 第15页下载如图片无法显示或论文不完整,请联系qq752018766