1. 程式人生 > >Socket多執行緒程式設計

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多執行緒程式設計到的知識: