1. 程式人生 > >關於socket與serversocket中的輸入輸出流【轉載】

關於socket與serversocket中的輸入輸出流【轉載】

關於socket與serversocket中的輸入輸出流

1,客戶端的socket連線到伺服器的套接字

socket mysocket=new socket(“127.0.0.1”,30000);用埠號30000連線到本機,當然這裡可能發生io異常,注意拋異常

當套接字mysocket建立後,類似一條通訊線路已經建立。

mysocket可以使用getInputStream()方法獲得一個輸入流,用此輸入流來讀伺服器放入“線路”中的資訊(但是不能讀自己放入”線路”的資訊,就像打電話的聽筒)。當然與此對應的mysocket還可以用getOutputStream()方法來獲得一個輸出流,即拿到了自己的話筒,

將自己的要輸出的資訊放入“線路”

實際中可能會把mysocket使用getInputStream()獲得的輸入流的資訊放到另一個數據流(如DataInputStream)上,同樣把DataOutputStream()流代替getOutputStream()方法

2,ServerSocket類

》客戶端建立的socket連線只是負責呼叫伺服器,那麼伺服器也要建立一個等待接受客戶的套接字serversocket物件

ServerSocket server_socket=new ServerSocket(30000);與上面的埠號一致

伺服器的ServerSocket物件server_socket建立以後,可以使用accept()方法接收客戶的套接字呼應

》Socket sc=server_socket.accept();

所謂”接收”客戶的套接字連線就是accept()方法會返回一個和客戶端Socket物件相連線的Socket物件,伺服器端的Socket物件sc使用getoutputstream()方法獲得的輸出流將指向客戶端Socket物件mysocket使用getinoutstream()獲得的那個輸入流;

同樣sc使用getinoutstream獲得的輸入流將指向mysocket使用getoutputstream獲得的輸出流


上圖只是指示出一般的資料流向,實際中的mysocket求情連線和server_socket等待連線,其連線過程是一直相互的

>>使用套接字連線時,可能在一斷沒發出資料之前,另一端就開始嘗試讀取,這樣就會堵塞本執行緒,直到讀到資訊為止

同樣,accept()方法也會堵塞執行緒

用完連線後注意close()方法關閉socket

4,將套接字放到執行緒中

因為執行緒容易堵塞,所以應該為每個套接字連線建立一個執行緒

例如:客戶端使用Socket類不帶引數的構造方法Socket()建立一個套接字物件,該物件要呼叫

public void connect(SocketAddress xxx) throws IOException

請求和引數SocketAddress 指定地址的套接字建立連線。

為使用該connect方法,可以使用SocketAddress的子類InetSocketAddress建立一個物件,InetSocketAddress的構造方法如下:

public InetSocketAddress(InetSocketAddress add,int port),

下面是簡單的例項(不完整):

Socket socket=new Socket(); 
InetAddress addre=InetAddress.getByName(“127.0.0.1”);
InetSocketAddress socketAddress=new InetSocketAddress(addre,4331);
socket.connect(socketAddress);
當然實際中是自己寫一些connect連線方法,可以嵌入自己的需要的一些功能(如新增對話方塊,登入框、進行驗證等)

相關推薦

關於socketserversocket輸入輸出轉載

關於socket與serversocket中的輸入輸出流 1,客戶端的socket連線到伺服器的套接字 socket mysocket=new socket(“127.0.0.1”,30000);用埠號30000連線到本機,當然這裡可能發生io異常,注意拋異常 當套

c++輸入輸出為什麼必須過載為友元

若是將輸入輸出流過載為類的成員函式,形式為: cout.operator<<(Complex &c1); 因為cout類的opetator<<函式的原始碼無法改變,所以無法過載為類的成員函式; 操作符過載過程中,需要用的類的成員變數,所以只是

java輸入輸出的知識總結 以及小例子程式

處理流(包在其他管道上的管道) 緩衝流: BufferedReader(Reader in) BufferedReader(Reader in,int sz)//sz為自定義緩衝區的大小 BufferedWriter(Writer out) BufferedInputStr

DatagramSocket(郵遞員):對應數據報的Socket概念,不需要創建兩個socket,不可使用輸入輸出

框架 getc 包括 文件系統 字節數 基礎 pac 抽象類 單位 UDP編程: DatagramSocket(郵遞員):對應數據報的Socket概念,不需要創建兩個socket,不可使用輸入輸出流。 DatagramPacket(信件):數據包,是UDP下進行傳輸數據

Java輸入輸出轉載

字符串數組 三種 dir row 接口 jdk1 end get 繼承 看到一篇超清晰的輸入輸出流文章,就轉載一下,膜拜 http://blog.csdn.net/hguisu/article/details/7418161 1.什麽是IO Java中I/O操作

輸入輸出外掛模板

我是行走的少年郎。 文藝程式設計師,美食愛好者。 ——————————————— 喜愛程式設計、跑步,喜愛寫字、讀書。 喜愛一切能讓自己變得美好的事物。 ——————————————— 為了更好的閱讀體驗,請關注個人部落格: 『不羈閣』 | 行走的少年郎

Linux /boot 目錄介紹 轉載

cond 備份 ges 直接 modprobe 虛擬 人員 完成 linux中 Linux中 /boot 目錄介紹 轉自:點擊打開鏈接 一、/boot/目錄中的文件和目錄 Linux系統在本地啟動時,目錄/boot/非常重要,其中的文件和目錄有:

BIONIO、AIO的區別 轉載

不堪 ext 開啟 單獨 選擇 調用 visible 解決 react IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、異步非阻塞的AIO。 一、BIO 在JDK1.4出來之前,我們建立網絡連接的時候采用BIO模式,需要先在服務端啟動一個Server

Python的函式引數轉載

原文地址:廖雪峰的官方網站:函式的引數. 定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需瞭解。 Python的函式定義非常簡單,但靈活

JavaIO輸入輸出概述總結

ips 刪除一個文件 數據 長度 還要 都是 模式 方式 歌曲 轉自:https://www.cnblogs.com/biehongli/p/6074713.html 1:Java語言定義了許多類專門負責各種方式的輸入或者輸出,這些類都被放在java.io包中。其中, 所有

Java基礎異常處理輸入輸出

finally中的程式碼執行時機 try{}語句中含有return,那麼finally還會執行嗎?如果會,那麼是什麼時候執行(return前還是return後) 在Java的異常處理中,不論什麼情形,finally中的邏輯一定會執行,也就是說try{}塊

Java的字節輸入和字符輸入輸出

io流 tput filter fileread pip ray int ng- class Java中的字節輸入出流和字符輸入輸出流以下哪個流類屬於面向字符的輸入流( )A BufferedWriter B FileInputStream C ObjectInputSt

c++IO輸入輸出總結<二>

操作 clu 文件 blog trunc pub filename binary team 1 文件的打開和關閉 1.1 定義流對象   ifsteam iflie;//文件輸入流對象   ifsteam iflie;//文件輸出流對象   fsteam iflie;//文

Java資料輸入輸出——DataInputStream和DataOutputStream

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java面向物件多執行緒綜合實驗(三)之輸入輸出

瞭解Java中I/O流的概念和種類;掌握位元組流處理和字元流處理,包括File類,InputStream/OutputStream及其子類,Reader/Writer及其子類;熟練掌握檔案的順序處理,隨機訪問處理;熟悉物件序列化的概念和方法。 編寫程式,實現檔案管理系統中的檔案上傳/下載模組

javaFile類和IO輸入輸出隨機讀寫類RandomAccessFile類的講解

今天來複習一下IO流的api, 在java中用io流來進行檔案的輸出和輸出操作,那麼首先類講解一下什麼是輸入和輸出: 所有往記憶體中送資料都是輸入 所有從記憶體出資料都是輸出 能用java.io包中的api操作的輸入輸出: 記憶體–>外存(硬碟,光碟,U盤) 本地流輸出

java標準輸入輸出

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.i

C++cin/cout和符號的原理(對過載輸入輸出比較有用)

cin/cout並不是C++的關鍵字,而是物件。 C++的<iostrem>中,有一個istream類和一個ostream類,而cin就是istream類的物件,cout就是ostream類的物件。 流符號是怎樣實現的呢? C++支援過載運算子,而流符號(<<、&

IO字元和位元組輸入輸出概述

1、 IO流用來處理裝置之間的資料傳輸  a) 上傳檔案  b) 下載檔案 2、 Java對資料的操作都是通過流的方式 3、 Java 用於操作流的物件都在IO包中 4、 IO流分類  a) 流向   i. 輸入流:程式讀取資料   ii. 輸出流:程式向硬碟寫

unity3d 輸入輸出,Asset根目錄路徑

沙盒路徑 Asset根目錄路徑: Application.dataPath +”xxx”; 寫入操作 StreamWrite –sw.Write() 寫入文件 讀入操作 StreamReader – sr.ReadToEnd() 讀入文件 建立檔案,寫內