Socket多執行緒程式設計
/*伺服器端*/
package socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
@classname:soccketDemo
@author:aionbo
@date:上午10:35:40
@work:
*/
public class Server {
private ServerSocket server;
private Socket socket;
public Server() throws IOException{
server=new ServerSocket(9595);
}
/*
* 伺服器服務
*/
public void service(){
System.out.println("server start...");
while(true){
try {
socket =server.accept();//阻塞
//Thread t =new Thread(new TcpThread(socket));//implements Runnable
TcpThread t=new TcpThread(socket);
System.out.println(t.getName());
t.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
new Server().service();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 多執行緒通訊
*/
class TcpThread extends Thread{//implements Runnable
Socket socket;
public TcpThread(Socket s){
socket=s;
}
/*
* 資訊追加
*/
public String echo(String str){
return "hello:"+str;
}
@Override
public void run() {
try{
// TODO Auto-generated method stub
System.out.println("連線成功,IP地址:"+socket.getInetAddress()+" 埠:"+socket.getPort());
//獲得客戶端的訊息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF8"));
//伺服器的響應訊息
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF8"));
//PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
//DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
while(true){
String str=br.readLine();
if(str.equals("exit")){
//pw.close();
bw.close();
//dos.close();
br.close();
socket.close();
break;
}
System.out.println(str);
Thread.sleep(100);
// pw.println(echo(str));
// pw.flush();
bw.write(echo(str)+"\r\n");
bw.flush();
// dos.writeUTF(echo(str)+"\r\n");
// dos.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("客戶端關閉");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*客戶端*/
package socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
new ClientThread().start();;
}
}
class ClientThread extends Thread{
Socket socket;
ClientThread() throws UnknownHostException, IOException{
socket=new Socket("127.0.0.1",9595);
}
public void run(){
try {
@SuppressWarnings("resource")
//Socket socket=new Socket("127.0.0.1",9595);
//獲得客戶端的響應訊息
BufferedReader brr=new BufferedReader(new InputStreamReader((System.in),"UTF8"));
//獲得服務端的訊息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF8"));
//客戶端的響應訊息
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF8"));
//PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
// DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
while(true){
String str=brr.readLine();//阻塞
// pw.println(str);
// pw.flush();
bw.write(str+"\r\n");
bw.flush();
// dos.writeUTF(str+"\r\n");
// dos.flush();
if(str.equals("exit")){
brr.close();
br.close();
break;
}
Thread.sleep(100);
System.out.println(br.readLine());
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("伺服器未啟動");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相關推薦
Socket多執行緒程式設計
/*伺服器端*/ package socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataOutputStream; import java.io.I
Java socket 多執行緒程式設計 示例
package com.my.socket.test; import java.io.IOException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Util { p
C# Socket多執行緒程式設計例項-聊天程式
C#是微軟隨著VS.net新推出的一門語言。它作為一門新興的語言,有著C++的強健,又有著VB等的RAD特性。而且,微軟推出C#主要的目的是為了 對抗Sun公司的Java。大家都知道Java語言的強大功能,尤其在網路程式設計方面。於是,C#在網路程式設計方面也自然不甘
Java多執行緒程式設計中執行緒的同步與互斥/執行緒安全/Java鎖
摘要:多執行緒三個特徵:原子性、可見性以及有序性.>執行緒的同步與互斥?(同步執行緒與非同步執行緒,執行緒同步和非同步問題) 1.同步:假設現有執行緒A和執行緒B,執行緒A需要往緩衝區寫資料,執行緒B需要從緩衝區讀資料,但他們之間存在一種制約
Linux多執行緒程式設計---執行緒間同步(互斥鎖、條件變數、訊號量和讀寫鎖)
本篇博文轉自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了多種方式來處理執行緒同步,最常用的是互斥鎖、條件變數、訊號量和讀寫鎖。 下面是思維導
java多執行緒程式設計詳細入門教程
##1、概念 執行緒是jvm排程的最小單元,也叫做輕量級程序,程序是由執行緒組成,執行緒擁有私有的程式技術器以及棧,並且能夠訪問堆中的共享資源。這裡提出一個問題,為什麼要用多執行緒?有一下幾點,首先,隨著cpu核心數的增加,計算機硬
Python Threading 多執行緒程式設計
寫在篇前 threading模組是python多執行緒處理包,使用該模組可以很方便的實現多執行緒處理任務,本篇文章的基礎是需要掌握程序、執行緒基本概念,對PV原語、鎖等傳統同步處理方法有一定的瞭解。另外,threading模組的實現是參考java多執行緒處理方式,並且只實現了其中的一
MFC多執行緒程式設計實踐總結之AfxBeginThread()
在MFC多執行緒程式設計中,執行緒函式呼叫類內成員變數和成員函式的步驟: 1.將執行緒函式在類.h檔案中類內宣告,並用修飾符static修飾; class CtestDlg : public CDialogEx { public: &nbs
DEVOPS-01多程序、多執行緒程式設計
一、多執行緒程式設計 1.1 forking工作原理 1.1.1 什麼是forking 1. fork(分岔)在Linux系統中使用非常廣泛 2. 當某一命令執行時,父程序(當前程序)fork出一個子程序 3. 父程序將自身資源拷貝一份,命令在子程序中執行時,就具
java多執行緒程式設計之使用Synchronized塊同步變數
通過synchronized塊來同步特定的靜態或非靜態方法。 要想實現這種需求必須為這些特性的方法定義一個類變數,然後將這些方法的程式碼用synchronized塊括起來,並將這個類變數作為引數傳入synchronized塊 下面的程式碼演示瞭如何同步特定的類方法:
20180829-Java多執行緒程式設計
Java 多執行緒程式設計 Java給多執行緒程式設計提供了內建的支援。一個多執行緒程式包含兩個或多個能併發執行的部分。 程式的每一部分都稱作一個執行緒,並且每個執行緒定義了一個獨立的執行路徑。 多執行緒是多工的一種特別的形式。多執行緒比多工需要更小的開銷。 這裡定義和執行緒相關的另一
java學習筆記-多執行緒程式設計模擬十個人過山洞
編寫多執行緒應用程式,模擬多個人通過一個山洞的模擬。這個山洞每次只能通過一個人,每個人通過山洞的時間為5秒,隨機生成10個人,同時準備過此山洞,顯示一下每次通過山洞人的姓名。 使用執行緒同步,把山洞看做臨界資源,五秒內只允許一個人來訪問。 class cave { p
Java多執行緒程式設計詳細解析
Java多執行緒程式設計詳細解析 一、理解多執行緒多執行緒是這樣一種機制,它允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。執行緒又稱為輕量級程序,它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程
Java多執行緒程式設計 — 鎖優化
作者:melonstreet 連結:www.cnblogs.com/QG-whz 閱讀目錄 一、儘量不用:儘量不要鎖住方法 二、減小粒度:縮小同步程式碼塊,只鎖資料 三、避免巢狀:鎖中儘量不要再包含鎖 四、鎖私有化:將鎖私有化,在內部管理鎖 五、適當分解:進行適當的鎖分解
多執行緒程式設計-002-GCD
p.p1 { margin: 0.0px 0.0px 0.0px 18.0px; text-indent: -18.0px; font: 14.0px "Yuanti SC"; color: #000000 } ①什麼是GCD p.p1 { margin: 0.0px 0.
多執行緒程式設計-003-NSOPeration
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000 } span.s1 { background-color: #ffffff } NSOPeration [NSOperationQue
linux執行緒基礎概念及多執行緒程式設計
Linux中執行緒的概念: 首先,Linux中並不存在真在的執行緒。Linux中的執行緒是使用程序來模擬的。在一個程序需要同時執行多個執行流時,linux並不是開闢多個執行緒來執行,而是通過多個程序來模擬多個執行緒。 Linux中執行緒的實現原理: 首先先看一下張圖: 此時共有
Java多執行緒程式設計核心(1)
Java多執行緒程式設計核心(1) 停止執行緒 本節主要討論如何更好停止一個執行緒。停止執行緒意味著線上程處理完成任務之前放棄當前操作。 1.停不了的執行緒 可能大多數同學會使用interrupt()來停止執行緒,但是此方法並不能真的停止執行緒,僅僅是在當年執行緒中打了一個停
Python實戰之多執行緒程式設計thread模組
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
java基礎總結(三十二)--java多執行緒程式設計例項
來自:https://blog.csdn.net/qq_34996727/article/details/80416277或者https://www.cnblogs.com/pureEve/p/6524366.html 一.相關知識: Java多執行緒程式設計到的知識: