java使用多執行緒實現多客戶端的通訊
實現步驟:
伺服器端:
1、建立ServerSocket物件,繫結監聽埠
2、通過accept()方法監聽客戶端請求(迴圈監聽)
3、server與socket建立專線連線,兩個socket在一個單獨的執行緒上對話、通過輸入流讀取客戶端傳送的請求資訊
4、通過輸出流向客戶端傳送響應資訊
5、server繼續等待新的連線
6、關閉相應資源
客戶端:
1、建立Socket物件,指明需要連線的伺服器的地址和埠號
2、連線建立後,通過輸出流向伺服器端傳送請求資訊
3、通過輸入流獲取伺服器響應的資訊
4、關閉相應的資源
Server
package com.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import javax.swing.text.AbstractDocument.BranchElement; /* * 基於TCP協議的Socket通訊,實現使用者登入 * 伺服器端 */ public class Server { public static void main(String[] args) { try { //1.建立一個伺服器端的Socket,即ServerSocket,指定繫結的埠,並監聽此埠 ServerSocket serverSocket=new ServerSocket(8888); //2.呼叫accept方法開始監聽,等待客戶端的連線 Socket socket=null; int count=0; System.out.println("***伺服器即將啟動,等待客戶端的連線***"); while(true) { socket=serverSocket.accept(); ServerThread serverThread = new ServerThread(socket); serverThread.start(); //統計客戶端的數量 count++; System.out.println("客戶端的數量為:"+count); InetAddress address = socket.getInetAddress(); System.out.println("客戶端的ip為:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } }
Client
package com.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /* * 客戶端 */ public class Client { public static void main(String[] args) { try { //1.建立客戶端socket,指定伺服器地址和埠 Socket socket=new Socket("localhost", 8888); //2.獲取輸出流,向伺服器端傳送訊息 OutputStream os=socket.getOutputStream(); //位元組輸出流 PrintWriter pw=new PrintWriter(os); //將位元組流包裝成列印流 pw.write("使用者名稱:xiaolu;密碼:233"); pw.flush(); //重新整理快取 socket.shutdownOutput(); //3.獲取輸入流,並讀取伺服器端的響應資訊 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String info=null; while((info=br.readLine())!=null) { System.out.println("我是客戶端,伺服器說:"+info); } br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
ServerThread
package com.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; /* * 伺服器執行緒處理類 */ public class ServerThread extends Thread{ //和本執行緒相關的Socket Socket socket = null; public ServerThread(Socket socket) { this.socket=socket; } //執行緒執行操作,響應客戶端請求 public void run() { InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; OutputStream os = null; PrintWriter pw = null; try { //3. 獲取輸入流,並讀取客戶端資訊 is = socket.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); String info=null; while((info=br.readLine())!=null) { System.out.println("我是伺服器,客戶端說:"+info); } socket.shutdownInput();//關閉輸入流 os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("歡迎你!"); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(pw!=null) pw.close(); if(os!=null) os.close(); //關閉資源 if(br!=null) br.close(); if(isr!=null) isr.close(); if(is!=null) is.close(); if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
相關推薦
Java Socket應用(三)多執行緒實現多客戶端的通訊
伺服器執行緒處理類ServerThread.java : package com.yijia; import java.io.*; import java.net.Socket; /** * 建立時間:2018/10/4 14:59 * 作者: * 郵箱:[ema
java使用多執行緒實現多客戶端的通訊
實現步驟:伺服器端:1、建立ServerSocket物件,繫結監聽埠2、通過accept()方法監聽客戶端請求(迴圈監聽)3、server與socket建立專線連線,兩個socket在一個單獨的執行緒上對話、通過輸入流讀取客戶端傳送的請求資訊4、通過輸出流向客戶端傳送響應資訊
Java Socket(六) 使用多執行緒實現多客戶端的通訊
問題 一個服務端可以跟多個客戶端通訊 基本步驟 1.伺服器端建立ServerSocket方法,迴圈呼叫accept()方法等待客戶端連線 2.客戶端建立socket和服務的請求連線 3.服務端接受客戶端的請求,建立專線連線 4.建立連線的兩個sock
Socket 服務端使用多執行緒實現多客戶端通訊例項
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; impo
socket使用多執行緒實現多客戶端通訊
伺服器端:package com.imooc;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/* * 基於TCP協議的Socket通訊,實現使用者登入 * 伺服器端
多執行緒使用ZK客戶端可能會出現的問題。java.io.IOException: 遠端主機強迫關閉了一個現有的連線。
java.io.IOException: 遠端主機強迫關閉了一個現有的連線。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(So
Qt 多執行緒伺服器與客戶端
文章目錄 思路 伺服器 myserver.h myserver.cpp mythread.h mythread.cpp mysocket.h mysocket.cpp
java使用 網路連線+RandomAccessFile + io 多執行緒實現多執行緒下載檔案並顯示實時網速
下載檔案的時候,一個大檔案切成很多片,用多執行緒下載,速度會快很多 閱讀程式碼的時候注意檢視程式碼裡面的註釋 想用多執行緒下載檔案,則, 第一:得了解 RandomAccessFile 類,這是個隨機訪問檔案類,裡面可以設定 訪問的 開始地址和結束地址,且該類可讀可
linux tcp多執行緒伺服器與客戶端程式設計例項
伺服器端: #include<iostream> #include<arpa/inet.h> #include<sys/socket.h> #include<cstdlib> #include<cstdio> #i
用多執行緒實現多使用者同時收發的簡單socket服務端
簡單的socket程式碼和多執行緒練習用socket服務端和多執行緒實現可以連線多個客戶端並同時收發的功能。這裡要用到socket 和 threading所以,記得:import socket, threading一、建立socket服務端首先,按正常操作,建立一個socke
Java 多執行緒實現多個視窗同時賣票
建立執行緒的第二種方式:實現Runable介面 步驟: 1,定義類實現Runnable介面 2,覆蓋Runnable介面中的run方法。將執行緒要執行的程式碼存放在該run方法中。 3,通過Thread類建立執行緒物件。 4,將Runnable介面的子類物件作為實際引數傳遞
基於Python多執行緒的TCP客戶端/服務端應用示例
每個連線都必須建立新執行緒(或程序)來處理,否則,單執行緒在處理連線的過程中,無法接受其他客戶端的連線。 服務端:server.py # -*- coding:utf-8 -*- import s
二、多執行緒實現簡單的socket通訊例項(TCP)
1.伺服器端 import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 類功能描述:先啟動伺服器端,再啟動客戶端 * * @author:*** * @createTime:2018/
Linux系統程式設計——多執行緒實現多工
概述 每個程序都擁有自己的資料段、程式碼段和堆疊段,這就造成程序在進行建立、切換、撤銷操作時,需要較大的系統開銷。為了減少系統開銷,從程序中演化出了執行緒。為了讓程序完成一定的工作,程序必須至少包含一個執行緒。執行緒存在於程序中,共享程序的資源。更多詳情,請看《程序和執行緒的區別與聯絡》
多執行緒(多執行緒實現多工)
多工 多工指在作業系統中可以同時執行多個任務,現在的大多數系統都是多工的 作用:能夠充分合理的運用系統的資源,讓其作用發揮到最大 實現多工有哪些方式呢? 1.多執行緒 2.多程序 3.多協程 今天主要說說多執行緒實現多工 首先了解了解並行與併
通過多執行緒實現非阻塞TCP通訊
在tcp通訊中,一般都是阻塞的,如果要實現非阻塞,我們可以使用多執行緒也可以使用nio中相關的類。這裡我使用的是多執行緒的方式實現非阻塞。 伺服器端: 1.建立ServerSocket物件,繫結監聽埠; 2.呼叫accept()方法對客戶端進行監聽; 3
Java使用多執行緒實現Socket多客戶端的通訊
要想詳細瞭解socket,大家請自行百度,我這裡只簡單介紹。 在網路中,我們可以利用ip地址+協議+埠號唯一標示網路中的一個程序。而socket程式設計就是為了完成兩個唯一程序之間的通訊(一個是客戶端,一個是伺服器端),其中用到的協議是TCP/UDP協議,它們都屬於傳輸層的協議。 TCP是基於連
【Java】Java多執行緒實現的聊天客戶端和伺服器
主要涉及知識 ·Java中GUI程式的編寫,包括事件監聽機制。 ·Java的網路通訊程式設計,ServerSocket,Socket類的使用。 ·Java中多執行緒的程式設計,Thread類,Runnable介面的使用。 原始碼 客戶端 package project1
應用java多執行緒實現伺服器端與多客戶端之間的通訊
package test.concurrent.socket; import java.io.*; import java.net.Socket; /** * Created by dong on 15-6-22. * 伺服器端執行緒處理類 */ public class ServerThread
java網路程式設計(二)複用Socket連線以及使用多執行緒完成多個客戶端的連線
在前面的示例中,客戶端中建立了一次連線,只發送一次資料就關閉了,這就相當於撥打電話時,電話打通了只對話一次就關閉了,其實更加常用的應該是撥通一次電話以後多次對話,這就是複用客戶端連線。 那 麼如何實現建立一次連線,進行多次資料交換呢?其實很簡單,建立連線以後,