Java socket通訊例項,簡單入門socket例項程式碼
是不是看了許多socket入門知識,卻還是不能實際運用呢,這篇文章通過利用簡單例項程式講解通過socket實現客戶端與伺服器之間的通訊。這篇文章可以讓你不需要了解socket原理也能利用,便於應急,但建議之後要好好補補關於soket的基礎知識。
首先就是上程式碼,先是伺服器端程式碼SocketServerDemo.java,裡面已經有詳細註釋。
客戶端程式碼SocketClientDemo.java:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServerDemo { private ServerSocket serverSocket; public SocketServerDemo(){ try{ //設定你伺服器監聽的埠為10000,使用者能使用的埠為1025-65535 serverSocket = new ServerSocket(10000); }catch(IOException e){ //捕獲異常,不懂的話好好看java, e.printStackTrace(); } //建立新的監聽主執行緒,這個執行緒建立ServerSocket監聽 new Thread(new Runnable(){ public void run(){ while(true){ Socket socket = null; try{ socket = serverSocket.accept(); //當監聽到了客戶端連線後,建立新執行緒傳輸資料,這樣可以實現多個客戶端同時訪問 new Thread(new SocketHandler(socket)).start(); }catch(Exception e){ e.printStackTrace(); } } } }).start(); } class SocketHandler implements Runnable{ private Socket socket; private BufferedReader reader; private PrintWriter writer; SocketHandler(Socket socket){ try{ this.socket = socket; reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream(),"GB2312")); writer = new PrintWriter(socket.getOutputStream(), true); writer.println("-------welcome---------"); writer.println("-------welcome---------"); writer.println("-------welcome---------"); }catch(IOException e){ e.printStackTrace(); } } //這裡是覆蓋實現介面Runnable裡的run() public void run(){ try{ //讀取資料,這裡只能讀取一行String String line = reader.readLine(); System.out.println(line); }catch(IOException e){e.printStackTrace();}finally{ //最後要關閉Socket try{ if(socket!=null)socket.close(); if(reader!=null)reader.close(); if(writer!=null)writer.close(); }catch(IOException e){ e.printStackTrace(); } } } } public static void main(String[] args){ new SocketServerDemo(); } }
測試:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class SocketClientDemo implements Runnable{ private Socket socket; BufferedReader reader; private PrintWriter writer; public SocketClientDemo(){ try{ //127.0.0.1表示本機IP,10000為伺服器Socket設定的埠 socket = new Socket("127.0.0.1", 10000); reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GB2312")); writer = new PrintWriter(socket.getOutputStream(), true); writer.println("working............."); }catch(IOException e){ e.printStackTrace(); } } public void run(){ try{ //這裡就可以讀取所有行String String line, buffer=""; while(!((line = reader.readLine())==null)) buffer+=line; System.out.println(buffer); }catch(IOException e){ e.printStackTrace(); System.out.println("problem"); }finally{ //最後關閉Socket try{ if(socket!=null)socket.close(); if(reader!=null)reader.close(); if(writer!=null)writer.close(); }catch(IOException e){ e.printStackTrace(); } } } public static void main(String[] args){ new Thread(new SocketClientDemo()).start(); } }
可以在同一臺電腦上開啟兩個cmd進行測試,客戶端Socket的ip填127.0.0.1,下面介紹在用兩臺在同一個區域網內的電腦進行測試,這裡的區別就是ip怎麼填,在作為伺服器的電腦中執行以下步驟查詢本機在區域網內的ip:
開啟“開啟網路和共享中心”,點選“”更改介面卡設定”,找到正在使用的網絡卡,點選右鍵,然後點選“狀態”,點選“詳細資訊”,IPv4地址就是本機在區域網內的地址。
或者在cmd上輸入ipconfig,找到正在使用的網絡卡的ip。
如何通過外網ip訪問伺服器,首先查詢本機的外網ip可以在百度裡面輸入ip即可看到本機的外網ip,於是同學們把這ip輸入到客戶端Socket中,編譯,執行,不行。。。。。你可以查下在區域網內所有的電腦的外網ip,發現他們外網ip竟然相同,學過計算機網路的知道,區域網中的主機是共享外網ip的。那怎麼實現不在區域網的兩臺電腦之間的通訊呢,這樣就要你的電腦有自己的外網ip,我的做法是申請一個雲伺服器,騰訊雲,阿里雲,每臺伺服器都有唯一的外網ip,自己去玩吧。第一篇部落格就到這裡了。
相關推薦
Java socket通訊例項,簡單入門socket例項程式碼
是不是看了許多socket入門知識,卻還是不能實際運用呢,這篇文章通過利用簡單例項程式講解通過socket實現客戶端與伺服器之間的通訊。這篇文章可以讓你不需要了解socket原理也能利用,便於應急,但建議之後要好好補補關於soket的基礎知識。 首先就是上程式碼,先是伺服器
java socket通訊時,中文字元亂碼的一個解決方法
可以使用: in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); out = new BufferedWriter(new OutputStreamWriter(s
Java 基於TCP/IP 實現簡單的 socket 通訊
Server.java package com.learn; import java.io.BufferedReader; import java.io.IOException; import
【java基礎】-socket通訊的一個簡單例子
在java語言中,Socket可以分為兩種型別:面向連線的Socket通訊協議(TCP),和麵向無連線的Socket通訊協議(UDP).任何一個Socket都是由IP地址和埠號唯一確定的。 Socket的生命週期可以分為3個階段,開啟Socket、使用Socket收發資料和
真正去理解Socket通訊方式,手卡與基站連線方式到底是怎麼樣的?
在2018/10/25-2018/11/08專案試執行期間,存在著某種奇怪的現象,現象描述如下: 工人下井時候,基站總是漏了個別人的訊號; 工人下班出井口的時候,大約7個人中總有一兩個人的手卡訊號,基站是收不到訊號的; 注意:只有一個手卡的訊號超過10分鐘沒有收到而且最後的位
C#版 Socket程式設計(最簡單的Socket通訊功能)
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊;這裡只是一個簡單的示例,是一個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。 下面是示例程式的簡單步驟說明 伺服器端:
基於socket通訊的,利用MFC實現TCP通訊的C/S架構程式
1.程式說明 開發環境為VS2012,基於TCP連線的客戶端與服務端的通訊程式,服務端IP為本地網絡卡ip地址或127.0.0.1,預設埠為1234(在程式編寫過程中連線埠要大於1000,否則容易與計算機中某些程式埠衝突導致無法通訊)。 2.socket簡介 M
利用C#進行Socket通訊程式設計之二:一個例項
利用晚上這點閒暇時間,寫了一個Socket通訊的小例項,該例項包含伺服器端和客戶端。其基本工作流程是:當伺服器啟動服務以後,客戶端進行連線,如果連線成功,則使用者可以在傳送訊息框中輸入待發送的訊
C#Socket通訊基礎知識(非同步Socket通訊TCP)
一、Socket通訊基礎 《1》TCP/IP層次模型 這裡只討論重要的四層 01,應用層(Application):應用層是個很廣泛的概念,有一些基本相同的系統級TCP/IP應用以及應用協議,也有許多的企業應用和網際網路應用。http
struts1簡單入門使用例項
1、新增相關jar包 struts.jar、 commons-logging-1.1.jar 、commons-digester.jar、commons-beanutils.jar 2、web.xml配置 <servlet>&nbs
eclipse原始碼java反編譯外掛,簡單好用
第一步 在eclipse安裝路徑下的dropins資料夾下面放入反編譯外掛 重啟eclipse 第二步 設定 1.Window > Preferences > General > Editors > File Associatio
scrapy簡單入門及例項講解(一)
初識Scrapy Scrapy是一個用於Web網站抓取的應用框架,輸出的結構化資料可以廣泛用於各類程式,比如:資料探勘、資料處理、資料存檔等 儘管Scrapy是為Web抓取設計的,但也可以用於從API中提取資料 通過一個例項認識spider 為了快速認識S
Scrapy簡單入門及例項講解
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的資料(例如 Amazon Associa
Git使用教程,簡單入門教程
預警:因為詳細,所以行文有些長,新手邊看邊操作效果出乎你的預料)一:Git是什麼?Git是目前世界上最先進的分散式版本控制系統。工作原理 / 流程:Workspace:工作區Index / Stage:暫存區Repository:倉庫區(或本地倉庫)Remote:遠端倉庫
Java設計模式 - 原型模式簡單介紹及其例項應用
一:原型模式的定義? 定義:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。 簡單地講:給定一個原型物件來指明所要建立的物件的型別,然後用拷貝這個原型物件的方法來創建出更多的同類型物件。 二:JAVA中原型模式的實現? &n
Scrapy簡單入門及例項講解與安裝
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的資料(例如 Amazon Associate
用java編寫spark程式,簡單示例及執行
最近因為工作需要,研究了下spark,因為scala還不熟,所以先學習了java的spark程式寫法,下面是我的簡單測試程式的程式碼,大部分函式的用法已在註釋裡面註明。 我的環境:hadoop 2.2.0 spark-0.9.0
通過一個MVC HtmlHelper擴充套件例項,簡單說明擴充套件步驟
擴充套件Submit using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TestMvcH
安卓socket通訊連線建立演示(socket通訊第一彈)
歡迎轉載,請註明轉載自微信訂閱號(安卓程式設計入門進階)。 百度雲原清晰度地址:http://pan.baidu.com/s/1mhS0H8O 安卓的網路連線方式有socket和http兩類連線,本節課程介紹socket連線的網路建立過程。課程例項將編寫客戶端和伺服器兩個安
java 類的建立,如何通過類例項化物件。
一、 1.建立的類名要大寫。例如Person類,P要大寫。 2.編寫類的屬性,即成員變數。注意屬性對應的資料型別,一般類似身份證號的資料型別都用String。 2.構造方法。當你不寫構造方法時,系