1. 程式人生 > >Java socket通訊例項,簡單入門socket例項程式碼

Java socket通訊例項,簡單入門socket例項程式碼

是不是看了許多socket入門知識,卻還是不能實際運用呢,這篇文章通過利用簡單例項程式講解通過socket實現客戶端與伺服器之間的通訊。這篇文章可以讓你不需要了解socket原理也能利用,便於應急,但建議之後要好好補補關於soket的基礎知識。

首先就是上程式碼,先是伺服器端程式碼SocketServerDemo.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();
	}
}
客戶端程式碼SocketClientDemo.java:
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.構造方法。當你不寫構造方法時,系