socket實現服務端多執行緒,客戶端重複輸入
服務端
package wanfeng;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server2 extends Thread {
private ServerSocket ss=null;
private int clientcounter=0;
public Server2()
{
try {
ss=new ServerSocket(9999);
} catch (IOException e) {
System.out.println("繫結埠失敗!"+e.getMessage());
}
}
public void run()
{
Socket s= null;
try {
while(true) {
s = ss.accept();
clientcounter++;
SockerThread sockerThread = new SockerThread(s, clientcounter);//沒次接受一個,開啟一個多執行緒
sockerThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(ss!=null) {
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Server2 server2=new Server2();
server2.start();
}
}
服務端實現開啟多執行緒
package wanfeng;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class SockerThread extends Thread {
private Socket s = null;
private int clientcounter=0;
public SockerThread(Socket s,int clientcounter)
{
this.s=s;
this.clientcounter=clientcounter;
System.out.println("有新執行緒連線了:當前執行緒數為:"+clientcounter+"執行緒id:"+currentThread().getId());
}
public void run()
{
//InputStream inputStream=null;
try {
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(s.getInputStream()));
/*inputStream=s.getInputStream();
byte[] buf=new byte[1024];
int num=inputStream.read(buf);
String string = new String(buf,0,num);*/
String string = "";
while((string = bufferedReader.readLine())!=null) {
System.out.println(s.getInetAddress().toString() + ": " + string + " " + "客戶端id: " + clientcounter);
}
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端
package wanfeng;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client2 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
Socket socket = new Socket("127.0.0.1",9999);
//OutputStream outputStream=socket.getOutputStream();
PrintWriter out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
String str="";
while((str=scanner.nextLine())!=null)
{
out.println(str);
out.flush();
if(str.equals("q"))
break;
}
socket.close();
}
}
相關文章
- Qt實現基於多執行緒的檔案傳輸(服務端,客戶端)QT執行緒服務端客戶端
- php原生socket實現客戶端與服務端資料傳輸PHP客戶端服務端
- C/S(socket、執行緒 實現多個客戶端、伺服器端簡易通訊)執行緒客戶端伺服器
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- Java多執行緒技術:實現多使用者服務端Socket通訊Java執行緒服務端
- Go基於gRPC實現客戶端連入服務端GoRPC客戶端服務端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- Socket最簡單的客戶端與服務端通訊-Java客戶端服務端Java
- Qt實現網路聊天室(客戶端,服務端)QT客戶端服務端
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端
- Java的oauth2.0 服務端與客戶端的實現JavaOAuth服務端客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- Python socket的客戶端Python客戶端
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- 實現服務端和客戶端的實時雙向資料傳輸-WebSocket簡單瞭解服務端客戶端Web
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- HTML轉PDF的純客戶端和純服務端實現方案HTML客戶端服務端
- 利用執行緒池給客戶端傳檔案執行緒客戶端
- 【Linux網路程式設計-5】多執行緒服務端Linux程式設計執行緒服務端
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- 「iOS」行車服務app 「客戶端、後端思路+程式碼」iOSAPP客戶端後端
- springboot2整合websocket,實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- java netty 實現 websocket 服務端和客戶端雙向通訊 實現心跳和斷線重連 完整示例JavaNettyWeb服務端客戶端
- Netty入門系列(1) --使用Netty搭建服務端和客戶端Netty服務端客戶端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- 001 Rust 網路程式設計,實現 TCP 服務端和客戶端程式Rust程式設計TCP服務端客戶端
- 「完整案例」基於Socket開發TCP傳輸客戶端TCP客戶端
- Kotlin + Netty 在 Android 上實現 Socket 的服務端KotlinNettyAndroid服務端
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- rsync備份【基於客戶端與服務端】客戶端服務端
- 埃森哲:端到端客戶服務報告
- macOS 自帶的ftp服務端&vnc客戶端MacFTP服務端VNC客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- 利用tirpc庫實現簡單的客戶端和服務端RPC客戶端服務端