欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java socket 詳細(xì)介紹

 更新時(shí)間:2013年04月18日 15:41:56   作者:  
本篇文章小編為大家介紹,java socket 詳細(xì)介紹。需要的朋友參考下

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

//通過計(jì)算機(jī)名稱獲取計(jì)算機(jī)相關(guān)信息;
InetAddress i = InetAddress.getByName("Livingstone-PC");

//通過域名獲取主機(jī)相關(guān)信息
InetAddress ibaidu = InetAddress.getByName("www.baidu.com");

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

TCP:

Socket(客戶端):
在對象建立時(shí),就可以去連接指定主機(jī),因?yàn)門CP是面向連接的,所以在建立socket服務(wù)時(shí),就要有服務(wù)端存在,并連接成功,連接通
后,在該通道進(jìn)行數(shù)據(jù)傳輸;
// 創(chuàng)建客戶端的socket服務(wù),指定目標(biāo)主機(jī)和端口;
Socket s = new Socket("cj-PC", 10003);
// 為了發(fā)送數(shù)據(jù),應(yīng)該獲取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中,自動(dòng)關(guān)閉流對象;

ServerSocket(服務(wù)端):
建立服務(wù)端的socket服務(wù),ServerSocket,并監(jiān)聽一個(gè)端口;
獲取連接過來的客戶端對象,通過對象的accept方法,沒有連接就會(huì)等待(阻塞式):
客戶端如果發(fā)送數(shù)據(jù)過來,服務(wù)端要使用對應(yīng)的客戶端對象的讀取流獲取客戶端發(fā)過來的數(shù)據(jù);
ServerSocket ss = new ServerSocket(10003);

//ServerSocket(int port,int backlog);backlog為最大連接數(shù)目;
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();// 服務(wù)端會(huì)自動(dòng)關(guān)閉客戶端;
(1)客戶端:
建立socket服務(wù),指定要連接主機(jī)和端口;
獲取socket流中的輸出流,將數(shù)據(jù)寫到該流中,通過網(wǎng)絡(luò)發(fā)送給服務(wù)端;
獲取socket流中的輸入流,將服務(wù)端反饋的數(shù)據(jù)獲取,關(guān)閉客戶端資源;

UDP:

DatagramSocket:通過UDP傳輸方式,將一段文字?jǐn)?shù)據(jù)發(fā)送出去;
Send:
// 創(chuàng)建udp服務(wù),創(chuàng)建一個(gè)DatagramSocket對象并給定一個(gè)商品號(hào);
DatagramSocket socket = new DatagramSocket(8888);

// 確定數(shù)據(jù),并封裝成數(shù)據(jù)包,DatagramPacket(需指定目的機(jī)器的端口號(hào));
byte[] buf = "udp I'm coming".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("Machine-Name"), 10086);
// 發(fā)送;
socket.send(dp);
// 關(guān)閉;
socket.close();
Receive:
// 定義udpsocket服務(wù)。通常會(huì)監(jiān)聽一個(gè)端口,其實(shí)就是給這個(gè)接收網(wǎng)絡(luò)應(yīng)用程序定義數(shù)字標(biāo)識(shí);
DatagramSocket socket = new DatagramSocket(10086);
while (true) { //目的是不斷監(jiān)聽
byte[] buf = new byte[1024];
// 定義數(shù)據(jù)包,用于存儲(chǔ)數(shù)據(jù);
DatagramPacket dp = new DatagramPacket(buf, buf.length);
// 通過服務(wù)的receive方法將收到的數(shù)據(jù)存入數(shù)據(jù)包中;
socket.receive(dp);// 阻塞式方法,沒數(shù)據(jù)就卡死在此;
// 通過數(shù)據(jù)包的方法獲取其中的數(shù)據(jù);
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);
}
// 停止發(fā)送數(shù)據(jù)
s.shutdownOutput();

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

相關(guān)文章

  • 一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    java反射機(jī)制是一個(gè)很好用的東西,用它可以解決很多死的東西,因?yàn)榉瓷錂C(jī)制的靈活行很大,有了他,我們就不要花太多的時(shí)間來寫操做數(shù)據(jù)庫的代碼了,這個(gè)可以很大的減少開發(fā)時(shí)間,而且代碼的可讀性好
    2021-09-09
  • SpringBoot整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的流程

    SpringBoot整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的流程

    這篇文章主要介紹了SpringBoot整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • JAVA熔斷和降級(jí)真實(shí)關(guān)系的圖文詳解

    JAVA熔斷和降級(jí)真實(shí)關(guān)系的圖文詳解

    這篇文章主要介紹了Java熔斷和降級(jí)的關(guān)系,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    這篇文章主要為大家介紹了Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Spring核心容器IOC原理實(shí)例解析

    Spring核心容器IOC原理實(shí)例解析

    這篇文章主要介紹了Spring核心容器IOC原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot?Mail郵件任務(wù)詳情

    SpringBoot?Mail郵件任務(wù)詳情

    這篇文章主要介紹了SpringBoot?Mail郵件任務(wù)詳情,文章通過spring-boot-starter-mail包展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 對SpringMVC的@RequestParam的解釋

    對SpringMVC的@RequestParam的解釋

    下面小編就為大家?guī)硪黄獙pringMVC的@RequestParam的解釋。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java文件拒絕訪問問題及解決

    Java文件拒絕訪問問題及解決

    這篇文章主要介紹了Java文件拒絕訪問問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • IDEA 集成log4j將SQL語句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    IDEA 集成log4j將SQL語句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    這篇文章主要介紹了IDEA 集成log4j將SQL語句打印在控制臺(tái)上的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

    如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

    在本篇文章里小編給大家整理的是一篇關(guān)于如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404相關(guān)文章,需要的朋友們學(xué)習(xí)下。
    2019-11-11

最新評(píng)論