java websocket框架,java socket 消息中轉,Java中Socket實現消息傳輸(傳輸原型)

 2023-10-05 阅读 25 评论 0

摘要:項目已經做的差不多了,其中做了一個消息的轉發功能,所以自己也寫一個簡單的例子看看先一步步的來吧,先寫好一個Socket的消息傳輸的原型來,再一步步的改進吧。其實在這個基礎上要中的東西還是很多的1.客戶端的登陸2.客戶端與服務端的斷連后重連3.消

項目已經做的差不多了,其中做了一個消息的轉發功能,所以自己也寫一個簡單的例子看看

先一步步的來吧,先寫好一個Socket的消息傳輸的原型來,再一步步的改進吧。

其實在這個基礎上要中的東西還是很多的

1.客戶端的登陸

2.客戶端與服務端的斷連后重連

3.消息的編解碼

4.將傳輸改成由接收,發送,處理隊列與接收,發送,處理線程來做

5.隊列的超時機制

6.多線程安全

7.服務端收到消息可以進行群發或是轉發

.....

問題還是很多,先放個簡單的東西來做吧

Server原型

服務端主要是為了接收客戶端發來的消息并把這個消息群發到每一個客戶端去。所以設置了一個List以存入Socket

這里主要做的是在start()方法中開一個線程,讓服務端通過這個線程進行進行監聽客戶端發來的消息并拿到這個Socket對像,其實這東西本不需要開一個線程去做,但是為了不在ss.accept()的時候讓整個調用這個方法的主線程在那里等待,所以開了個線程去做,一但接到客戶端的消息就把接收線程拉起

Java代碼

a117b4e479f53f5512143ff7af3e2fc7.png

package?demo;

import?java.io.DataInputStream;

import?java.io.DataOutputStream;

import?java.io.IOException;

import?java.io.InputStream;

import?java.io.OutputStream;

import?java.net.ServerSocket;

import?java.net.Socket;

import?java.util.LinkedList;

import?java.util.List;

public?class?Server?{

private?ServerSocket?ss?=?null;

private?List?list?=?new?LinkedList();

private?class?ReceiveThread?extends?Thread?{

private?Socket?socket?=?null;

public?ReceiveThread(Socket?socket)?{

super("ReceiveThread");

this.socket?=?socket;

}

@Override

public?void?run()?{

InputStream?in?=?null;

DataInputStream?dis?=?null;

while?(true)?{

try?{

sleep(50);

}?catch?(InterruptedException?e1)?{

e1.printStackTrace();

}

if?(socket?==?null?||?socket.isClosed()

||?!socket.isConnected())?{

continue;

}

try?{

in?=?socket.getInputStream();

dis?=?new?DataInputStream(in);

String?readUTF?=?dis.readUTF();

System.out.println("receive?client?message?:"?+?socket

+?"?"?+?readUTF);

send(readUTF);

}?catch?(IOException?e)?{

try?{

in.close();

dis.close();

}?catch?(IOException?e1)?{

e1.printStackTrace();

}

list.remove(socket);

e.printStackTrace();

}

}

}

}

public?void?send(String?msg)?throws?IOException?{

for?(int?i?=?;?i?

Socket?groupSocket?=?list.get(i);

OutputStream?out?=?groupSocket.getOutputStream();

DataOutputStream?dout?=?new?DataOutputStream(out);

dout.writeUTF(msg);

dout.flush();

out.flush();

}

}

public?class?AcceptSocketThread?extends?Thread?{

public?AcceptSocketThread()?{

super("AcceptSocketThread");

}

public?void?run()?{

try?{

ss?=?new?ServerSocket(7788);

while?(true)?{

Socket?socket?=?ss.accept();

list.add(socket);

new?ReceiveThread(socket).start();

}

}?catch?(IOException?e)?{

e.printStackTrace();

}

}

}

private?void?start()?throws?IOException?{

new?AcceptSocketThread().start();

}

public?static?void?main(String[]?args)?throws?Exception?{

System.out.println("Server?start?....");

new?Server().start();

}

}

2.客戶端Client

這個就比較簡單了,只是為了發送消息和接收消息

Java代碼

a117b4e479f53f5512143ff7af3e2fc7.png

package?demo;

import?java.io.DataInputStream;

import?java.io.DataOutputStream;

import?java.io.IOException;

import?java.io.InputStream;

import?java.io.OutputStream;

import?java.net.InetAddress;

import?java.net.Socket;

import?java.util.Scanner;

public?class?Client?{

private?Socket?socket?=?null;

private?class?ReceiveThread?extends?Thread?{

@Override

public?void?run()?{

while?(true)?{

try?{

InputStream?in?=?socket.getInputStream();

DataInputStream?din?=?new?DataInputStream(in);

String?readUTF?=?din.readUTF();

System.out.println("Server?Send?Message:?"?+?readUTF);

}?catch?(IOException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

}

}

}

public?void?start()?throws?IOException?{

socket?=?new?Socket(InetAddress.getByName("127.0.0.1"),?7788);

new?ReceiveThread().start();

System.out.println("Client?start?....\nPlease?input?message?:?");

while?(true)?{

Scanner?scaner?=?new?Scanner(System.in);

String?next?=?scaner.next();

OutputStream?out?=?socket.getOutputStream();

DataOutputStream?dout?=?new?DataOutputStream(out);

dout.writeUTF(next);

//?scaner.close();

dout.flush();

}

}

public?static?void?main(String[]?args)?throws?IOException?{

System.out.println("client?...");

Client?client?=?new?Client();

client.start();

}

}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/114560.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息