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();
}
}
以上表示接收伺服器端傳送來的資訊。
但是執行的時候首先要執行客戶端,之後再執行伺服器端。