亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Socket在局域網(wǎng)聊天系統(tǒng)中的應(yīng)用

        2014-01-15 01:54:54李淑梅王志彬
        關(guān)鍵詞:服務(wù)器端局域網(wǎng)聊天

        李淑梅,王志彬

        (吉林師范大學(xué) 計(jì)算機(jī)學(xué)院,吉林 四平 136000)

        0 引言

        Linux操作系統(tǒng)堅(jiān)持以網(wǎng)絡(luò)為核心為其設(shè)計(jì)思想,使其具有突出的網(wǎng)絡(luò)性能,同時(shí)Linux具有多用戶、多線程的能力,都為開發(fā)高性能的網(wǎng)絡(luò)通信軟件奠定了良好的基礎(chǔ)[1-2].

        在Linux操作系統(tǒng)中,實(shí)現(xiàn)網(wǎng)絡(luò)通信主要采用的技術(shù)就是套接字socket(又稱BSD socket).socket作為開放的網(wǎng)絡(luò)編程接口,以其眾多的優(yōu)勢(shì)廣泛地應(yīng)用在網(wǎng)絡(luò)編程中.目前,大部分的局域網(wǎng)聊天系統(tǒng)都要求多用戶同時(shí)在線,還要資源開銷少、響應(yīng)速度快的短信式交互,并且對(duì)數(shù)據(jù)可靠性要求不高,所以基于UDP 的socket成為開發(fā)網(wǎng)絡(luò)通信軟件的首選工具[3-4].

        1 UDP socket編程

        1.1 socket概述

        在網(wǎng)絡(luò)中,如果兩臺(tái)主機(jī)是通過(guò)“通道”進(jìn)行通信,那么socket接口就是“通道”兩端的出入口.socket接口為主機(jī)提供了一個(gè)通信端口,通過(guò)“通道”,可以與另一端具有socket接口的主機(jī)通信.如圖1所示,網(wǎng)絡(luò)上傳輸?shù)男畔ⅲ罱K都是通過(guò)socket接口收發(fā)的.

        socket的類型有SOCK_STREAM、SOCK_DGRAM和SOCK_RAW三種,用戶使用的主要是前兩種類型.SOCK_STREAM采用TCP協(xié)議,提供面向連接的、可靠的數(shù)據(jù)傳輸服務(wù);SOCK_DGRAM采用UDP協(xié)議,提供無(wú)連接的、不可靠的數(shù)據(jù)傳輸服務(wù).

        圖1 socket的地位

        1.2 UDP協(xié)議及無(wú)連接服務(wù)

        作為開放系統(tǒng)互聯(lián)參考模型傳輸層上兩個(gè)主要協(xié)議之一的UDP,為應(yīng)用程序提供無(wú)連接服務(wù).基于UDP的無(wú)連接服務(wù),不必事先與對(duì)方建立連接,客戶程序與服務(wù)程序之間的相互作用只需一個(gè)請(qǐng)求和一個(gè)應(yīng)答就完成,因而數(shù)據(jù)傳輸?shù)难舆t極小;不需要維護(hù)發(fā)送雙方的狀態(tài),可以同時(shí)支持更多的在線客戶,使用更靈活;由于數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,UDP數(shù)據(jù)包的標(biāo)題很短(只有8個(gè)字節(jié)),對(duì)資源的需求更少;由于沒(méi)有擁塞控制的限制,吞吐量只受應(yīng)用程序產(chǎn)生數(shù)據(jù)的速率、發(fā)送端主機(jī)的性能以及傳輸帶寬的限制[5-6].

        在局域網(wǎng)聊天系統(tǒng)中,擁有大量的客戶,網(wǎng)絡(luò)負(fù)擔(dān)重,對(duì)響應(yīng)速度要求高,同時(shí)網(wǎng)絡(luò)數(shù)據(jù)大多為短消息,對(duì)數(shù)據(jù)安全性無(wú)特殊要求,使用UDP的無(wú)連接服務(wù)是有意義的.

        1.3 UDP socket函數(shù)

        在Linux 環(huán)境下,兩個(gè)進(jìn)程間進(jìn)行通信,常用的標(biāo)準(zhǔn)庫(kù)函數(shù)為[7-9]:

        (1)socket ( ):使用此函數(shù),為應(yīng)用程序使用socket創(chuàng)建了一個(gè)socket號(hào),同時(shí)參數(shù)中指定了通信所用的協(xié)議.

        (2)bind():socket的客戶端和服務(wù)端可以通過(guò)調(diào)用該函數(shù)來(lái)配置本地信息,將創(chuàng)建成功的socket號(hào)與本地地址和端口綁定,此時(shí)三元組{協(xié)議,本地地址,本地端口}確定,這是socket在全網(wǎng)唯一的標(biāo)志.

        (3)sendto( ):若源進(jìn)程要發(fā)送數(shù)據(jù),使用此函數(shù),指定目的端的IP地址和端口,建立完整的相關(guān),可以將緩沖區(qū)中的數(shù)據(jù)發(fā)送到指定的接收進(jìn)程.

        (4)recvfrom( ):若進(jìn)程要接收信息,使用此函數(shù),指定源端的IP地址和端口,可以將socket緩沖區(qū)中的數(shù)據(jù)接收.

        (5)close():數(shù)據(jù)的收發(fā)工作全部完成,關(guān)閉socket時(shí)使用此函數(shù).

        在客戶/服務(wù)器模式下,UDP socket編程的基本過(guò)程如圖2所示[10].

        圖2 socket編程過(guò)程圖

        2 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)

        局域網(wǎng)聊天系統(tǒng)主要為局域網(wǎng)內(nèi)的用戶提供信息交流的平臺(tái),實(shí)現(xiàn)局域網(wǎng)內(nèi)部通信的目的.作為局域網(wǎng)內(nèi)的通信工具,采用客戶/服務(wù)器體系結(jié)構(gòu),將系統(tǒng)分成服務(wù)器端和客戶端進(jìn)行開發(fā).

        聊天系統(tǒng)中不僅包括服務(wù)器與客戶端的通信,還包括客戶端與客戶端的通信.由于每個(gè)客戶都跟服務(wù)器建立了獨(dú)立連接,客戶端之間的通信(包括私聊和群聊),可以借助服務(wù)器完成.對(duì)于私聊,發(fā)送方A先將消息發(fā)給服務(wù)器,再由服務(wù)器把消息轉(zhuǎn)發(fā)給接收方B;對(duì)于群聊,發(fā)送方A先將消息發(fā)給服務(wù)器,再由服務(wù)器把消息發(fā)給所有在線的客戶.

        2.1 聊天系統(tǒng)的功能

        聊天系統(tǒng)的功能如圖3所示:

        圖3 聊天系統(tǒng)功能模塊圖

        服務(wù)器端主要包括初始化模塊,監(jiān)控模塊和通信處理模塊.初始化模塊完成服務(wù)器端的公共套接字的創(chuàng)建與配置;監(jiān)控模塊監(jiān)控當(dāng)前在線用戶,對(duì)客戶的上線、離線進(jìn)行處理,通過(guò)UDP的多播功能把客戶名稱等信息發(fā)送給客戶端,生成客戶列表顯示給客戶;通信處理模塊主要對(duì)客戶的消息進(jìn)行處理,實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收.如果服務(wù)器接收不到消息一直處于阻塞狀態(tài),直到收到消息.

        客戶端模塊主要包括登錄模塊、刷新模塊、聊天模塊.登錄模塊完成用戶的登錄和初始化客戶界面工作;刷新模塊接收從服務(wù)器傳來(lái)的信息,更新用戶列表;聊天模塊完成與單個(gè)客戶的通信和向所有在線客戶發(fā)送消息的功能.

        2.2 主要執(zhí)行過(guò)程

        服務(wù)器端:服務(wù)器啟動(dòng)后,使用socket()創(chuàng)建公共socket號(hào),用bind()與IP地址和端口綁定,等待客戶的消息.一旦檢測(cè)到客戶登錄成功,監(jiān)控模塊根據(jù)客戶端的信息更新客戶列表,并反饋給客戶,使客戶得知哪些客戶在線.客戶端就可以與服務(wù)器端進(jìn)行數(shù)據(jù)交換,由通信處理模塊完成聊天的功能,包括群聊和私聊[11].

        客戶端:首先調(diào)用連接模塊檢測(cè)服務(wù)器是否在運(yùn)行,若運(yùn)行再登錄.客戶端登錄輸入用戶名,使用socket()創(chuàng)建socket號(hào).用sendto()發(fā)送消息,以告知服務(wù)器在線,然后服務(wù)器返回在線用戶列表.此時(shí),可以進(jìn)入聊天界面.用戶選擇單聊還是群聊,利用聊天模塊,開始數(shù)據(jù)通信.若要結(jié)束,則使用close(),關(guān)閉socket.

        2.3 部分源代碼

        局域網(wǎng)聊天系統(tǒng)采用C語(yǔ)言作為編程語(yǔ)言,下面是服務(wù)器端和客戶端的部分源代碼.

        服務(wù)器端:

        int main()

        {

        pub_sockfd = socket(AF_INET,SOCK_DGRAM,0);//服務(wù)器端創(chuàng)建數(shù)據(jù)報(bào)socket

        if(pub_sockfd < 0)

        {perror("socket error");

        exit(1);

        }

        ser_addr.sin_family = AF_INET;//指定協(xié)議族為TCP/IP協(xié)議

        ser_addr.sin_port = htons(PORT);//PORT為指定的端口

        ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);// 指定本機(jī)IP地址

        bind(pub_sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr));//將socket與本地IP地址和端口綁定

        ……

        }

        客戶端主要代碼:

        void client_sock( )

        {

        ……

        sockfd_client = socket(AF_INET,SOCK_DGRAM,0);//客戶端創(chuàng)建數(shù)據(jù)報(bào)socket

        ……

        cliaddr.sin_family = AF_INET;

        cliaddr.sin_port = htons(PORT);// 設(shè)置服務(wù)器的端口

        cliaddr.sin_addr.s_addr = inet_addr(SER_IP);// 指定服務(wù)器的IP地址

        ret = sendto(sockfd_client,&cmd,sizeof(struct cli_send_cmd),0,(struct sockaddr *)&cliaddr,sizeof(cliaddr))//客戶端向服務(wù)器端發(fā)送消息

        ……

        ret = recvfrom(sockfd_client,buf,1024,0,(struct sockaddr *)&cliaddr,&cli_len);

        /*接收從服務(wù)器端發(fā)來(lái)的消息*/

        ……

        }

        2.4 測(cè)試結(jié)果

        圖4為系統(tǒng)運(yùn)行時(shí)私聊的界面.

        圖4 測(cè)試界面

        3 結(jié)語(yǔ)

        本文在Linux環(huán)境下,將基于數(shù)據(jù)報(bào)協(xié)議UDP的socket應(yīng)用到局域網(wǎng)聊天系統(tǒng)中,使局域網(wǎng)聊天系統(tǒng)在減少資源開銷的同時(shí),加快了響應(yīng)的速度,可以同時(shí)支持更多的用戶在線.基于UDP的socket是收發(fā)信息的理想選擇,其在網(wǎng)絡(luò)中的應(yīng)用值得進(jìn)一步去探究.

        [1]王繼魁.Linux下基于shell腳本的聊天工具[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,30(1):122~124.

        [2]賈紅偉,葉文來(lái).嵌入式操作系統(tǒng)與嵌入式Linux[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,26(3):97~99.

        [3]周小松,朱雄軍.基于UOP協(xié)議的Socket網(wǎng)絡(luò)編程模式的實(shí)現(xiàn)[J].武漢職業(yè)技術(shù)學(xué)院學(xué)報(bào),2007,6:84~86.

        [4]陳健葦.基于Winsock的局域網(wǎng)聊天室設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)學(xué)技術(shù)與應(yīng)用,2013,(2):134~136.

        [5]吳培賢.Linux環(huán)境下基于UDP的socket編程淺析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2006,(1):63~66.

        [6]杜經(jīng)緯,王春紅.在P2P網(wǎng)絡(luò)環(huán)境下基于UDP協(xié)議穿越NAT研究[J].吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,33(1):93~95.

        [7]朱 斌.Linux Socket編程及其在無(wú)線網(wǎng)關(guān)中的應(yīng)用[J].微計(jì)算機(jī)信息,2007,23:70~74.

        [8]鄒 月,陳建兵.Socket 的網(wǎng)絡(luò)編程研究與實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2008,(1):11~12.

        [9]周西峰,陸 鵬,郭前崗.利用Socket實(shí)現(xiàn)Windows與Linux平臺(tái)間的網(wǎng)絡(luò)通信[J].微型機(jī)與應(yīng)用,2013,18:49~51.

        [10]劉 燁.用Socket實(shí)現(xiàn)基于TCP和UPP的原理探索[J].電腦學(xué)習(xí),2009,(6):6~7.

        [11]蕭泳東,肖 化.基于Linux的網(wǎng)絡(luò)聊天系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2013,(3):51~54.

        猜你喜歡
        服務(wù)器端局域網(wǎng)聊天
        基于VPN的機(jī)房局域網(wǎng)遠(yuǎn)程控制系統(tǒng)
        電子制作(2019年16期)2019-09-27 09:35:04
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        基于802.1Q協(xié)議的虛擬局域網(wǎng)技術(shù)研究與實(shí)現(xiàn)
        電子制作(2017年17期)2017-12-18 06:40:48
        我就是不想跟你聊天了
        意林(2017年9期)2017-06-06 10:26:12
        局域網(wǎng)性能的優(yōu)化
        電子制作(2017年8期)2017-06-05 09:36:15
        敞開門聊天
        在Windows中安裝OpenVPN
        網(wǎng)頁(yè)防篡改中分布式文件同步復(fù)制系統(tǒng)
        基于Struts的Web應(yīng)用系統(tǒng)數(shù)據(jù)驗(yàn)證
        聊天不倒王
        91精品在线免费| 天天天天躁天天爱天天碰2018| 久久99精品国产99久久6尤物| 国产日韩久久久精品影院首页| 按摩女内射少妇一二三区| 久草视频这里只有精品| 青青草国产精品一区二区| 日本一区午夜艳熟免费| 美女窝人体色www网站| av在线免费观看麻豆| 亚洲午夜久久久久久久久电影网 | 伊在人亚洲香蕉精品区麻豆| 亚洲综合一区二区三区在线观看| 草色噜噜噜av在线观看香蕉| 人成午夜免费大片| 亚洲熟妇中文字幕日产无码 | 曰韩少妇内射免费播放| 大肉大捧一进一出视频出来呀| 免费超爽大片黄| 久久99精品国产99久久| AV中文码一区二区三区| 偷拍综合在线视频二区日韩| 成人午夜特黄aaaaa片男男| 一个人看的www免费视频中文| 日本韩国黄色三级三级| 美女午夜福利视频网址| 女人被狂躁到高潮视频免费网站| 亚洲精品一二区| 情头一男一女高冷男女| 免费又黄又爽又色的视频| 无码一区二区波多野结衣播放搜索 | 亚洲av无码av吞精久久| 99久久国语露脸国产精品| 国产黑丝美女办公室激情啪啪| 国产精品久久国产精品99| 99久久国产视频| 国产一区二区在线观看av| 人妻中文字幕在线网站| 久久这里只精品国产免费10 | 中国美女a级毛片| 国产高潮刺激叫喊视频|