利用socket實(shí)現(xiàn)Windows與Linux平臺間的網(wǎng)絡(luò)通信
本文關(guān)鍵詞:利用socket實(shí)現(xiàn)Windows與Linux平臺間的網(wǎng)絡(luò)通信,由筆耕文化傳播整理發(fā)布。
利用socket實(shí)現(xiàn)Windows與Linux平臺間的網(wǎng)絡(luò)通信
先令maxfd為0,再比較client_fd與maxfd的大小,將兩者中較大的值賦給maxfd,即將文件描述符的最大值賦予maxfd。設(shè)置最大等待時(shí)間=1,=0。 retval=select(maxfd+1,&rfds,NULL,NULL,&tv),通過返回值retval判斷文件的讀寫情況。若retval為-1,則出錯(cuò);若retval為0,則繼續(xù)等待;若retval為正值,則文件可讀寫,可以執(zhí)行接下來的發(fā)送和接收消息的操作。2.1.3 發(fā)送與接收消息 if(FD_ISSET(0,&rfds))用來檢查指定文件描述符0是否在該集合rfds中,若滿足則執(zhí)行發(fā)送操作。fgets(buf,,MAXBUF,stdin)表示將鍵盤輸入的至多MAXBUF個(gè)字符的stdin送到buf中,摁下“Enter”鍵后即可發(fā)送。 同理,對于是否接收消息通過if (FD_ISSET(client_fd,&rfds))來判斷。2.1.4 斷開連接 若要斷開連接,則輸入“quit”。通過命令if(!strncasecmp(buf,"quit",4))來判斷輸入的內(nèi)容是否為quit。連接斷開后,顯示框顯示“Client has terminated the communication.”。2.2 Windows平臺軟件設(shè)計(jì) 在Windows系統(tǒng)中,使用C#語言來編寫socket程序。打開Microsoft Visual Studio 2010,新建一個(gè)“Windows窗體應(yīng)用程序”的項(xiàng)目。在窗體中添加兩個(gè)button控件,分別為button1(連接)和button2(發(fā)送)。并添加4個(gè)textBox控件,分別為textBox1(消息顯示框)、textBox2(消息輸入框)、textBox3(服務(wù)器IP地址輸入框)和textBox4(服務(wù)器端口號輸入框)。2.2.1 請求連接 新建socket,Server和nPort分別表示服務(wù)器IP地址和端口號,通過命令socket.Connect(ServerIP,nPort)來連接服務(wù)器。2.2.2 發(fā)送與接收消息
定義發(fā)送的字符串為Message,將消息輸入框textBox2中的內(nèi)容指定為Message。通過
發(fā)送命令socket.Send(System.Text.Encoding.Default.GetBytes(Message))進(jìn)行消息發(fā)送。 新建一個(gè)byte數(shù)組byte[] RecvBuffer,通過socket.Receive(RecvBuffer)將接收到的內(nèi)容存放到RecvBuffer中。接收成功后,將接收到的內(nèi)容顯示在消息顯示框中。3 運(yùn)行結(jié)果與分析3.1 編譯并執(zhí)行Linux端程序 gcc server_socket.c-o server_scoket ./server_socket 3352 Server 此時(shí),服務(wù)器端程序準(zhǔn)備就緒,等待客戶端請求連接。3.2 啟動Windows端的連接 打開Microsoft Visual Studio 2010軟件,點(diǎn)擊“啟動調(diào)試”鍵后彈出窗體界面。點(diǎn)擊窗體界面中的“連接”鍵后,客戶機(jī)端能夠成功連接服務(wù)器端。3.3 實(shí)現(xiàn)互相通信 連接成功后,服務(wù)器端和客戶機(jī)端可以自由發(fā)送消息。,Windows系統(tǒng)中,在窗體界面的“消息輸入框”中輸入消息,點(diǎn)擊“發(fā)送”后即可發(fā)送。在Linux終端中,輸入要發(fā)送的消息,點(diǎn)擊“Enter”鍵后進(jìn)行發(fā)送。。
3.4 結(jié)果分析 結(jié)果表明,服務(wù)器端和客戶機(jī)端在成功連接后能夠進(jìn)行通信。在Linux系統(tǒng)中,通信結(jié)果在終端顯示。在Windows系統(tǒng)中,通信結(jié)果在窗體界面中顯示。經(jīng)測試,兩個(gè)平臺間能夠完成無數(shù)次的收發(fā)操作。若要結(jié)束通信,在Linux終端中鍵入“quit”,即斷開連接。 本文闡述了Windows與Linux系統(tǒng)的網(wǎng)絡(luò)傳輸設(shè)計(jì)方法,雙方采用TCP/IP協(xié)議,運(yùn)用socket 接口來開發(fā)網(wǎng)絡(luò)通信程序。Windows平臺利用C#編寫socket程序,并通過窗體界面顯示通信過程。Linux平臺中的socket程序調(diào)用select函數(shù),實(shí)現(xiàn)非阻塞操作。套接字使得連接在通信兩端的進(jìn)程,能夠通過各自的套接字收發(fā)消息,從而實(shí)現(xiàn)了兩個(gè)平臺間的全雙工通信。目前的通信程序只能傳送字符串,要真正實(shí)現(xiàn)兩個(gè)系統(tǒng)之間的資源共享與消息傳遞,還需要它們之間能夠傳送文件、照片及視頻等大數(shù)據(jù)量的信息,這將是下一階段的研究重點(diǎn)。
本文關(guān)鍵詞:利用socket實(shí)現(xiàn)Windows與Linux平臺間的網(wǎng)絡(luò)通信,由筆耕文化傳播整理發(fā)布。
本文編號:175196
本文鏈接:http://sikaile.net/kejilunwen/wltx/175196.html