Socket用法,簡單模擬一對一聊天
https://blog.csdn.net/touch_2011/article/details/6914739
1、socket和serverSocket通信簡單介紹如下,注意客戶端與服務器端是怎麼交換數據的
2、模擬qq聊天功能,實現客戶端與服務器(一對一)的聊天功能
服務器端代碼:
package demo.net;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 模擬qq聊天功能: 實現客戶端與服務器(一對一)的聊天功能,客戶端首先發起聊天,輸入的內容在服務器端和客戶端顯示,
* 然後服務器端也可以輸入信息,同樣信息也在客戶端和服務器端顯示
*/
// 服務器類
public class ChatServer {
private int port = 8189;// 默認服務器端口
public ChatServer() {
}
// 創建指定端口的服務器
public ChatServer(int port) {
this.port = port;
}
// 提供服務
public void service() {
try {// 建立服務器連接
ServerSocket server = new ServerSocket(port);
// 等待客戶連接
Socket socket = server.accept();
try {
// 讀取客戶端傳過來信息的DataInputStream
DataInputStream in = new DataInputStream(socket
.getInputStream());
// 向客戶端發送信息的DataOutputStream
DataOutputStream out = new DataOutputStream(socket
.getOutputStream());
// 獲取控製台輸入的Scanner
Scanner scanner = new Scanner(System.in);
while (true) {
// 讀取來自客戶端的信息
String accpet = in.readUTF();
System.out.println(accpet);
String send = scanner.nextLine();
System.out.println("服務器:" + send);
// 把服務器端的輸入發給客戶端
out.writeUTF("服務器:" + send);
}
} finally {// 建立連接失敗的話不會執行socket.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatServer().service();
}
}
客戶端代碼:
package demo.net;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
/**
* 注意用到的輸入輸出流DataInputStream和DataOutputStream,成對出現,最好用字節流
*/
// 客戶端類
public class ChatClient {
private String host = "localhost";// 默認連接到本機
private int port = 8189;// 默認連接到端口8189
public ChatClient() {
}
// 連接到指定的主機和端口
public ChatClient(String host, int port) {
this.host = host;
this.port = port;
}
public void chat() {
try {
// 連接到服務器
Socket socket = new Socket(host, port);
try {
// 讀取服務器端傳過來信息的DataInputStream
DataInputStream in = new DataInputStream(socket
.getInputStream());
// 向服務器端發送信息的DataOutputStream
DataOutputStream out = new DataOutputStream(socket
.getOutputStream());
// 裝飾標準輸入流,用於從控製台輸入
Scanner scanner = new Scanner(System.in);
while (true) {
String send = scanner.nextLine();
System.out.println("客戶端:" + send);
// 把從控製台得到的信息傳送給服務器
out.writeUTF("客戶端:" + send);
// 讀取來自服務器的信息
String accpet = in.readUTF();
System.out.println(accpet);
}
} finally {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatClient().chat();
}
}
運行結果:
注意運行的時候要先開服務器,再開客戶端,聊天由客戶端發起。運行結果中綠色的字表示輸入。
最後更新:2017-04-03 19:13:18