這篇“如何用Java創(chuàng)建多線程局域網(wǎng)聊天室”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“如何用Java創(chuàng)建多線程局域網(wǎng)聊天室”文章吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了烏恰免費(fèi)建站歡迎大家使用!
要實(shí)現(xiàn)局域網(wǎng)連接,就必須知道信息傳輸?shù)脑怼?br/>在局域網(wǎng)里面?zhèn)鬏數(shù)男畔⒍际且园男问剑沂褂玫腡CP包傳輸數(shù)據(jù),TCP包里面封裝了IP報(bào)文。 在TCP中得到了服務(wù)器的IP地址,但是光憑IP地址無(wú)法對(duì)具體應(yīng)用進(jìn)行鎖定,所以引入了套接字這個(gè)概念。端口號(hào)用來(lái)鎖定主機(jī)的進(jìn)程。端口號(hào)一般取1024~49151,因?yàn)? ~ 1023是熟知端口號(hào),一般用于一些HTTP等等常用的端口,49152 ~ 65535是臨時(shí)端口號(hào),也不能隨機(jī)占用,一般是程序運(yùn)行過(guò)程中的臨時(shí)分配。 從Java類的角度看,服務(wù)器和客戶端通過(guò)套接字連接抽象了一個(gè)連接。服務(wù)器通過(guò)建立自己的套接字端口并監(jiān)聽(tīng)有無(wú)客戶在此端口連接,實(shí)現(xiàn)信息的讀取功能??蛻魴C(jī)通過(guò)服務(wù)器約定好的端口號(hào),來(lái)對(duì)服務(wù)器進(jìn)行傳輸數(shù)據(jù)。在服務(wù)器開(kāi)啟后,運(yùn)行客戶機(jī),將與服務(wù)器進(jìn)行三次握手建立TCP連接,然后在此連接的基礎(chǔ)上,實(shí)現(xiàn)客戶機(jī)與服務(wù)器的通信。 由于服務(wù)器可能同時(shí)服務(wù)多個(gè)對(duì)象,若是采用傳統(tǒng)的方法進(jìn)行服務(wù)器連接,則會(huì)出現(xiàn)多個(gè)客戶機(jī)等待一個(gè)客戶機(jī)與服務(wù)器交互的現(xiàn)象。為了解決這個(gè)問(wèn)題,采用多線程的方法。 服務(wù)器的架構(gòu)第三部分所示,代碼實(shí)現(xiàn)如下 客戶端 客戶端的架構(gòu)第三部分所示,代碼實(shí)現(xiàn)如下 以上就是關(guān)于“如何用Java創(chuàng)建多線程局域網(wǎng)聊天室”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
下面這句話就是通過(guò)一個(gè)靜態(tài)IPV4協(xié)議的類得到一個(gè)2.套接字
套接字=IP+端口號(hào)
這句話就是定義一個(gè)端口號(hào)9998和IP為192.168.43.86的套接字。int port = 9998;
socket = new Socket(address,port);
3.C/S架構(gòu)
4.多線程
用SuperSocket類繼承socket類并實(shí)現(xiàn)Runnable接口,實(shí)現(xiàn)多線程運(yùn)行。class SuperSocket extends Socket implements Runnable
SuperSocket socket_1 = new SuperSocket(9999);
SuperSocket socket_2 = new SuperSocket(9998);
SuperSocket socket_3 = new SuperSocket(9997);
Thread s1 = new Thread(socket_1);
Thread s2 = new Thread(socket_2);
Thread s3 = new Thread(socket_3);
5.服務(wù)器
package TCP;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPserver2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//實(shí)例化具有多線程功能的服務(wù)器專用socket類
//需要傳遞端口號(hào)作為初始化變量
SuperSocket socket_1 = new SuperSocket(9996);
SuperSocket socket_2 = new SuperSocket(9998);
SuperSocket socket_3 = new SuperSocket(9997);
//建立三個(gè)子線程
Thread s1 = new Thread(socket_1);
Thread s2 = new Thread(socket_2);
Thread s3 = new Thread(socket_3);
try {
while(true) {
//開(kāi)啟線程
s1.start();
s2.start();
s3.start();
if(scan.next()=="123"){
//結(jié)束線程
break;
}
}
} finally {
try {
//關(guān)閉套接字
socket_1.close();
socket_2.close();
socket_3.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class SuperSocket extends Socket implements Runnable{
InputStream is;
byte[] buffer;
Socket socket=null;
ServerSocket serverSocket=null;
public SuperSocket(int port){
try {
//初始服務(wù)器型套接字
serverSocket = new ServerSocket(port);
buffer = new byte[1024];
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
//等待端口連接
socket = serverSocket.accept();
//連接完成后創(chuàng)建輸入流
is = socket.getInputStream();
//讀取客戶端傳送信息
int len = is.read(buffer);
String str = new String(buffer, 0, len);
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package TCP;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TCPclient {
public static void main(String[] args) {
InetAddress address=null;
Socket socket=null;
OutputStream os=null;
String message=null;
Scanner sca=null;
try {
//得到本機(jī)IP地址
address = InetAddress.getByName("192.168.43.86");
//規(guī)定端口號(hào),建立套接字
int port = 9998;
socket = new Socket(address,port);
//綁定套接字的輸出流
os = socket.getOutputStream();
sca = new Scanner(System.in);
while(true) {
message = sca.next();
//寫(xiě)入輸出流,在局域網(wǎng)中傳輸
os.write(message.getBytes());
}
} catch (UnknownHostException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
//關(guān)閉端口號(hào),關(guān)閉io流
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
網(wǎng)站標(biāo)題:如何用Java創(chuàng)建多線程局域網(wǎng)聊天室
瀏覽地址:http://weahome.cn/article/jpseei.html