1. 程式人生 > >java 網路編輯實現多人聊天

java 網路編輯實現多人聊天

java 網路編輯實現多人聊天。

1、網路程式設計主要是指完成C/S程式的開發,程式的開發結構有兩種:

  • C/S(客戶端/伺服器),開發兩套程式,兩套程式需要同時維護。

  • B/S(瀏覽器/伺服器),開發一套程式,客戶端使用瀏覽器進行訪問。

2、C/S程式主要可以完成以下兩種程式的開發:

  • TCP:傳輸控制協議,採用三方握手的方式,保證準確的連線操作。

  • UDP:資料報協議,傳送資料報。

  • 所有的開發包都儲存在java.net包中。

TCP程式編寫。

  • 伺服器使用ServerSocket和Socket兩個類完成

  • 客戶端使用Socket 類完成。

1、編寫服務端。

首先,使用ServerSocket類編寫伺服器端,構造的時候傳入監聽的埠號。

  • ServerSocket server = new ServerSocket(埠號); //在【埠號】埠監聽。

之後,可以新增說出語句System.out.println("等待客戶端連線···");

緊接著,使用accept()方法接收客戶端的連線。

  • Socket client=server.accept();//程式執行到此位置進行等待

  • 設定為死迴圈,先拿到Socket,把accept()作為迴圈式的等待,之後多少個客戶端都可以連線上了。

每一個Client對Server來講都是一個Socket物件。

yi、伺服器向客戶端輸出:使用getOutputStream()方法取得客戶端的輸出流。
getOutputStream()客戶端的輸入流。
PrintStream out = new PrintStream(client.getOutputStream());
OutputStream out = socket.getOutputStream();

er、客戶端接收伺服器端輸入的內容:使用getInputStream()方法得到。
getInputStream()客戶端的輸出流。
InputStream in = socket.getInputStream();

2、編寫客戶端。

Socket在例項化的時候要指定連線的主機和埠號。

首先,Socket的例項化:

  • Socket client = new Socket("localhost", 9999);

InputStream input = client.getInputStream();// 得到輸入流

通過上述,發現:
一丶ServerSocket類

  • public ServerSocket(int port) throws IOException構造的時候傳入監聽的埠號

  • public Socket accept() throws IOException接收客戶端的連線
    二丶Socket類

  • Socket(String host,int port) throws
    UnknownHostException, IOException指明要連線的伺服器名稱和埠號
  • getInputStream()得到客戶端的輸入流
  • getOutputStream()得到客戶端的輸出流

ECHO程式。

--客戶端任意輸入內容,之後伺服器端在輸入的內容前加上"ECHO"返回給客戶端。

明確:
- 伺服器端的輸出流就是客戶端的輸入流。
- 客戶端的輸出流就是伺服器端的輸入流。

為伺服器端加入多執行緒。

如果現在要想進行多個客戶端的連線,則必須加入多執行緒的處理機制,將每一個連線的客戶端都建立一個新的執行緒物件。

UDP程式。

UDP屬於不可靠的連線,使用資料報協議進行傳送,主要使用以下的兩個類:

  • 資料報:DatagramPacket

  • 資料報的 Socket:DatagramSocket

伺服器端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class MyServer {
public static void main(String[] args) throws Exception {
String info = "Hello World";// 要傳送的資訊
// 將資訊封裝成資料報
DatagramPacket dp = new DatagramPacket(info.getBytes(), 0, info
.length(), InetAddress.getByName("localhost"), 6000);// 客戶端在6000埠監聽
DatagramSocket server = new DatagramSocket(3000);// 伺服器的埠
server.send(dp);// 傳送資料報
server.close();
}
}

客戶端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MyClient {
public static void main(String[] args) throws Exception {
byte b[] = new byte[1024];// 接收內容
DatagramPacket dp = new DatagramPacket(b, b.length);// 接收內容
DatagramSocket client = new DatagramSocket(6000);// 客戶端在6000埠等待
client.receive(dp); // 接收內容
System.out.println(new String(dp.getData(), 0, dp.getLength()));
client.close();
}
}

以上表示接收伺服器端傳送來的資訊。
但是執行的時候首先要執行客戶端,之後再執行伺服器端。