java socket 詳細介紹_java

來源:互聯網
上載者:User

//返回本地主機名稱及IP地址;
InetAddress i = InetAddress.getLocalHost();
i.getHostAddress();//IP
i.getAddress();//???

//通過電腦名稱擷取電腦相關資訊;
InetAddress i = InetAddress.getByName("Livingstone-PC");

//通過網域名稱擷取主機相關資訊
InetAddress ibaidu = InetAddress.getByName("www.baidu.com");

URL url = new URL("http://localhost:8080/demo.html");
url.getHost();

TCP:

Socket(用戶端):
在對象建立時,就可以去串連指定主機,因為TCP是連線導向的,所以在建立socket服務時,就要有服務端存在,並串連成功,串連通
後,在該通道進行資料轉送;
// 建立用戶端的socket服務,指定目標主機和連接埠;
Socket s = new Socket("cj-PC", 10003);
// 為了發送資料,應該擷取socket流中的輸出資料流;
OutputStream out = s.getOutputStream();
//PrintWriter out = new PrintWriter(s.getOutputStream(),true);out.println("你好");
out.write("hello".getBytes());

// 接收回送訊息
InputStream in = s.getInputStream();
byte[] bufIn = new byte[1024];
int num = in.read(bufIn);
System.out.println(new String(bufIn, 0, num));

s.close();// 流對象in封裝在socket中,自動關閉流對象;

ServerSocket(服務端):
建立服務端的socket服務,ServerSocket,並監聽一個連接埠;
擷取串連過來的用戶端對象,通過對象的accept方法,沒有串連就會等待(阻塞式):
用戶端如果發送資料過來,服務端要使用對應的用戶端對象的讀取流擷取用戶端發過來的資料;
ServerSocket ss = new ServerSocket(10003);

//ServerSocket(int port,int backlog);backlog為最大串連數目;
Socket s = ss.accept();
InputStream in = s.getInputStream();

byte[] buf = new byte[2014];
int len = in.read(buf);

String rec = new String(buf, 0, len);
System.out.println(rec);

// 回送訊息
OutputStream out = s.getOutputStream();
out.write("收到".getBytes());

s.close();// 服務端會自動關閉用戶端;
(1)用戶端:
建立socket服務,指定要串連主機和連接埠;
擷取socket流中的輸出資料流,將資料寫到該流中,通過網路發送給服務端;
擷取socket流中的輸入資料流,將服務端反饋的資料擷取,關閉用戶端資源;

UDP:

DatagramSocket:通過UDP傳輸方式,將一段文字資料發送出去;
Send:
// 建立udp服務,建立一個DatagramSocket對象並給定一個商品號;
DatagramSocket socket = new DatagramSocket(8888);

// 確定資料,並封裝成資料包,DatagramPacket(需指定目的機器的連接埠號碼);
byte[] buf = "udp I'm coming".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("Machine-Name"), 10086);
// 發送;
socket.send(dp);
// 關閉;
socket.close();
Receive:
// 定義udpsocket服務。通常會監聽一個連接埠,其實就是給這個接收網路應用程式定義數位識別碼;
DatagramSocket socket = new DatagramSocket(10086);
while (true) { //目的是不斷監聽
byte[] buf = new byte[1024];
// 定義資料包,用於儲存資料;
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 通過服務的receive方法將收到的資料存入資料包中;
socket.receive(dp);// 阻塞式方法,沒資料就卡死在此;
// 通過資料包的方法擷取其中的資料;
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
}

檔案上傳:

Socket s = new Socket("Machine-Name", 10005);
OutputStream out = s.getOutputStream();
FileInputStream fis = new FileInputStream("awf.jpg");
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}
// 停止發送資料
s.shutdownOutput();

ServerSocket ss = new ServerSocket(10005);//ss.accept()方法具有阻塞作用;
// 可為每一個accept()方法得到的Socket建立一個單獨的線程;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.