『壹』 android編程,用socket網路編程,PC作伺服器,手機是客戶端,連接不上
你PC 和手機要在同一個網路內,比如無線路由器,你手機用wifi連接路由,pc也連接路由,cmd命令查看下PC的ip地址,請確保你的Ip是PC的ip,許可權加上,這樣絕對是沒問題的,把你PC防火牆關掉,socket連接最好用
socket=new Socket();
SocketAddress socketAddress = new InetSocketAddress(ip,PORT);
socket.connect(socketAddress,8000);//設置超時時間
『貳』 android的socket編程里,如何一次只如去一個位元組
InputStream is = 你獲取到的輸入流
int read = is.read(); 讀取一個位元組
這個是一個阻塞操作,直到讀取到一個位元組,否則一直會阻塞在那等待數據到達,
當返回-1的時候表示讀取到流結尾了,可以理解成已經讀取完輸入流的全部數據了。
『叄』 android socket編程有什麼實例
通常也稱作"套接字",用於描述IP地址和埠,是一個通信鏈的句柄,應用程序通常通過"套接字"向網路發出請求或者應答網路請求。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個埠上,不同的埠對應於不同的服務。 SOCKET用於在兩個基於TCP/IP協議的應用程序之間相互通信。最早出現在UNIX系統中,是UNIX系統主要的信息傳遞方式。在WINDOWS系統中,SOCKET稱為WINSOCK。 兩個基本概念:客戶方和服務方。當兩個應用之間需要採用SOCKET通信時,首先需要在兩個應用之間(可能位於同一台機器,也可能位於不同的機器)建立SOCKET連接,發起呼叫連接請求的一方為客戶方,接受呼叫連接請求的一方成為服務方。客戶方和服務方是相對的,同一個應用可以是客戶方,也可以是服務方。 在客戶方呼叫連接請求之前,它必須知道服務方在哪裡。所以需要知道服務方所在機器的IP地址或機器名稱,如果客戶方和服務方事前有一個約定就好了,這個約定就是PORT(埠號)。也就是說,客戶方可以通過服務方所在機器的IP地址或機器名稱和埠號唯一的確定方式來呼叫服務方。在客戶方呼叫之前,服務方必須處於偵聽狀態,偵聽是否有客戶要求建立連接。一旦接到連接請求,服務方可以根據情況建立或拒絕連接。連接方式有兩種,同步方式(Blocking)和(noBlocking). 客戶方發送的消息可以是文本,也可以是二進制信息流。當客戶方的消息到達服務方埠時,會自動觸發一個事件(event),服務方只要接管該事件,就可以接受來自客戶方的消息了。
『肆』 android的socket編程裡面,如何確定輸入流的位元組長度呢
inputstream.avaliable()
『伍』 android 為什麼一般要用http來進行網路編程,而用 socket 的比較少 sockest有什麼缺點
http在tcp之上,要先用socket建立tcp才能實現http。只不過幫你把底層實現屏蔽了,面向對象的特點。
『陸』 android socket 編程中,本機IP與虛擬機IP分別是多少
Socket(套接字)是一種抽象層,應用程序通過它來發送和接收數據,就像應用程序打開了一個文件句柄,將數據讀寫到穩定的存儲器上一樣。使用Socket可以將應用程序添加到網路中,並與處於同一網路中的其他應用程序進行通信。一台計算機上的應用程序向socket寫入的信息能夠被另一台計算機上的另一個應用程序讀取,反之依然。根據不同的的底層協議實現,也會很多種不同的Socket。本課當中只覆蓋了TCP/IP協議族的內容,在這個協議族當中主要的Socket類型為流套接字(stream socket)和數據報套接字(datagram socket)。流套接字將TCP作為其端對端協議,提供了一個可信賴的位元組流服務。數據報套接字使用UDP協議,提供可一個「盡力而為」的數據報服務,應用程序可以通過它發送最長65500位元組的個人信息。
使用基於TCP協議的Socket
一個客戶端要發起一次通信,首先必須知道運行伺服器端的主機IP地址。然後由網路基礎設施利用目標地址,將客戶端發送的信息傳遞到正確的主機上,在java中,地址可以由一個字元串來定義,這個字元串可以使數字型的地址(比如192.168.1.1),也可以是主機名(example.com)。
在Java當中InetAddress類代表了一個網路目標地址,包括主機名和數字類型的地址信息。
使用基於UDP的Socket
1.創建DatagramPacket
DatagramSocket(byte [] data,int offset,int length,InetAddress remoteAddr,int remotePort)該構造函數創建一個數據報文對象,數據包含在第一個參數當中
2.創建DatagramSocket創建
DatagramSocket(int localPort)以上構造函數將創建一個UDP套接字;
3. DatagramSocket:發送和接受
void send(DatagramPacket packet)
void receive(DatagramPacket packet)
send()方法用來發送DatagramPacket實例。一旦創建連接,數據報將發送到該套接字所連接的地址;
receive()方法將阻塞等待,知道接收到數據報文,並將報文中的數據復制到指定的DatagramPacket實例中
Android 模擬器中做埠重定向
android的模擬器有個特點,就是訪問網路的時候只可以從模擬器主動往出去連。但是卻無法主的從外面連接模擬器,這個特點和NAT幾乎完全一樣,具有單向連接的特性。 實際開發中我們希望模擬器像一台獨立的手機一樣,能和處於同一區域網中的手機進行端對端的通信。這時就需要做埠重定向。 類似於給路由器做nat的埠重定向。
運行模擬器:你會發現模擬器標題欄上寫著埠號:5554,其實這個埠號是模擬器的console埠 >telnet到模擬器的console口上:telnet localhost 5554在控制台下輸入 redir add tcp:6668:9998 就完成了從主機6668埠重定向到模擬器9998埠的任務
建議使用Android 手機進行調試,在模擬器使用java socket會遇上很多連接不上的問題,這些都是模擬,才導致的
『柒』 Android socket編程,用線程來捕獲socket返回的數據,出現了問題,沒有
你這個寫法,發送的代碼在while循環以外,只能收一次,然後線程就退出了.
『捌』 如何用socket實現android手機與手機之間的通信
參考一般的JAVA的socket編程,如果通過手機網路,就不要使用UDP即可。
『玖』 android Socket編程使用死循環一直收發數據CPU佔用率過高怎麼辦
伺服器端與客戶端都加上Thread.sleep(XXX)方法,時間根據自己的需要權衡
『拾』 android socket編程,客戶端老是提示socket已關閉是為什麼
TCP連接斷開的時候調用closesocket函數,已經討論過有優雅的斷開和強制斷開,那麼如何設置斷開連接的方式呢?是通過設置socket描述符一個linger結構體屬性。
linger結構體數據結構如下:
struct linger
{
int l_onoff;
int l_linger;
};
有三種組合方式:
第一種
l_onoff = 0;
l_linger忽略
這種方式下,就是在closesocket的時候立刻返回,底層會將未發送完的數據發送完成後再釋放資源,也就
是優雅的退出。
第二種
l_onoff非零
l_linger = 0;
這種方式下,在調用closesocket的時候同樣會立刻返回,但不會發送未發送完成的數據,而是通過一個REST包強制的關閉socket描述符,也就是強制的退出。
第三種
l_onoff非零
l_linger > 0
這種方式下,在調用closesocket的時候不會立刻返回,內核會延遲一段時間,這個時間就由l_linger得值來決定。如果超時時間到達之前,發送完未發送的數據(包括FIN包)並得到另一端的確認,closesocket會返回正確,socket描述符優雅性退出。否則,closesocket會直接返回錯誤值,未發送數據丟失,socket描述符被強制性退出。需要注意的時,如果socket描述符被設置為非堵塞型,則closesocket會直接返回值。
關於TCP的退出暫時了解這些,遇到問題再具體分析解決。