1. 程式人生 > >【java基礎】-socket通訊的一個簡單例子

【java基礎】-socket通訊的一個簡單例子

在java語言中,Socket可以分為兩種型別:面向連線的Socket通訊協議(TCP),和麵向無連線的Socket通訊協議(UDP).任何一個Socket都是由IP地址和埠號唯一確定的。

Socket的生命週期可以分為3個階段,開啟Socket、使用Socket收發資料和關閉Socket。在Java語言中,可以使用ServerSocket來作為伺服器端,Socket作為客戶端來實現網路通訊。

首先,建立一個名為Server.java的服務端程式碼:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BufferedReader br=null;
		PrintWriter pw=null;
		
		try{
			ServerSocket server=new ServerSocket(2000);
			Socket socket=server.accept();
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			pw=new PrintWriter(socket.getOutputStream(),true);
			String s=br.readLine();
			pw.println(s);	
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				br.close();
				pw.close();
			}catch(Exception e){
				e.printStackTrace();
			}
			
		}

	}

}

其次,建立一個Client.java的客戶端程式,如下所示:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
	public static void main(String[] args) {
		BufferedReader br=null;
		PrintWriter pw=null;
		try{
			Socket socket=new Socket("localhost",2000);
			br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			pw=new PrintWriter(socket.getOutputStream(),true);
			pw.println("hello2");
			String s=null;
			while(true){
				s=br.readLine();
				if(s!=null)
					break;	
			}
			System.out.println("shou dao is "+s);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				br.close();
				pw.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}

}

相關推薦

java基礎-socket通訊一個簡單例子

在java語言中,Socket可以分為兩種型別:面向連線的Socket通訊協議(TCP),和麵向無連線的Socket通訊協議(UDP).任何一個Socket都是由IP地址和埠號唯一確定的。 Socket的生命週期可以分為3個階段,開啟Socket、使用Socket收發資料和

java基礎單例設計模式:保證一個類在記憶體中的物件唯一性

摘要:單例設計模式解決的問題就是可以保證一個類在記憶體中的物件唯一性,必須對於多個程式使用同一個配置資訊物件時,就需要保證物件的唯一性。 單例設計模式有兩個表現形式:餓漢式和懶漢式。餓漢式開發時常用,

Java基礎動態代理 一個動態代理的例子

參考資料:阿里雲大學MLDN高階開發課程2016黑馬程式設計師JAVAEE Day25 基礎加強動態代理是理解Spring AOP功能的一個重要概念程式碼例子:動態代理用於介面TargetInterface實體類Target和代理類ProxyTest都實現了TargetInt

Java基礎RTTI與反射之Java

start auth try dword star sse from tac sed 1 ; Example assembly language program -- 2 ; Author: Karllen 3 ; Date: revised 05/2014

轉載:Java基礎InputStream 、 InputStreamReader和BufferedReader

gen 結果 取字符 sys try eight string font buffer 來源:http://blog.csdn.net/zgljl2012/article/details/47267609 在Java中,上述三個類經常用於處理數據流,下面介紹一下三個類的

Java基礎Java常見的異常

java exception Java常見的異常1. java.lang.NullPointerException (空指針異常)調用了未經初始化的對象或者是不存在的對象2. java.lang.ClassNotFoundException 指定的類不存在3. java.lang.NumberForm

Java基礎Java基本數據類型與位運算

右移 數據 bits 類型 span 網上 height 使用 常數 1.賦值運算符 賦值使用操作符“=”。它的意思是“取右邊的值(即右值),把它復制給左邊(即左值)”。右值可以是任何 常數、變量或者表達式 (只要它能 生成

Java基礎Java運算符優先級

() logs 分享 body rowspan 單元 ima idt string 序列號 符號 名稱 結合性(與操作數) 目數 說明 1 . 點 從左到右

java基礎重寫equals()方法的同時要重寫hashCode()方法

而且 通過 才會 默認 什麽 需要 現在 ash 字段 1、 為什麽要重寫equals方法? 因為Object的equal方法默認是兩個對象的引用的比較,意思就是指向同一內存,地址則相等,否則不相等;如果你現在需要利用對象裏面字段的值來判斷是否相等,則重寫equals方法。

Java基礎基礎精華總結

  一:java概述(快速瀏覽): 1991 年Sun公司的James Gosling等人開始開發名稱為 Oak 的語言,希望用於控制嵌入在有線電視交換盒、PDA等的微處理器; 1994年將Oak語言更名為Java;   Java的三種技術架構: JAVA

Java基礎註解(Annotation)

  Annotation,程式碼裡的特殊標記,在編譯、類載入、執行時被讀取,並執行相應的處理。 使用註解,在不改變原有邏輯的情況下,在原始檔中嵌入一些補充資訊。 Annotation提供了一種為程式元素設定元資料的方法。 Ann

Java基礎-多重For迴圈的兩種跳出方式

先來小段Demo,自己跑一下就能看到效果了: public static void main(String[] args) { List<String> listA = new ArrayList<String>(); List<String> lis

Java基礎程式碼塊,構造程式碼塊,靜態程式碼塊

程式碼塊 public class Demo { public static void main(String[] args){ { int a = 1; System.out.println(a); }

Java基礎static關鍵字

通過static宣告的屬性或者方法可以通過類名稱直接呼叫 static方法只能呼叫static屬性或者方法,不能呼叫非static屬性或者方法 非static方法則不受限,可以任意呼叫static宣告的屬性或者方法 注意:main方法本身就是一個static方法 示例1:static方法呼叫

Java基礎Java 基本資料型別

Java 的兩大資料型別: 內建資料型別 Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。 byte: byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數; 最小值是 -1

Java基礎String,StringBuffer,StringBuilder之間的區別

對於這三個類,先總體來理解一下: 對String,你建立了一個String,你能通過set方法改變它的長度length嗎?顯然是不行的! 但 StringBuffer 可以! String 字串常量 StringBuffer 字串變數(執行緒安全) StringBu

java基礎ConcurrentHashMap實現原理及原始碼分析

  ConcurrentHashMap是Java併發包中提供的一個執行緒安全且高效的HashMap實現(若對HashMap的實現原理還不甚瞭解,可參考我的另一篇文章),ConcurrentHashMap在併發程式設計的場景中使用頻率非常之高,本文就來分析下Concurre

Java基礎Hashmap

     hashMap實現Map介面,基於hashing原理,以鍵值對形式儲存,允許null鍵/值,非同步的集合型別;      hashmap的底層儲存結構是基於陣列和連結串列的。 一、put方法 public Object put(Object key,Obj

Java基礎int和Integer

Java中存在8種基本資料型別:byte(8位)、short(16位)、int(32位)、long(64位)、float(32位)、double(64位)、char(16位,0x0000~0xffff)、boolean(true/false) java中不存在無符號數字型別,

Java 基礎15 Java 反射機制

反射 為什麼使用反射 需求:我公司定義了一組介面,然後第三方公司按照我公司的介面 實現了一套功能,然後交給我們,但是我們公司的專案已經結束,如何實現動態載入第三方公司提供的功能。 什麼是反射 反射就是把 Java 類中的各種成分對映成一個個的 Java 物件。例