資源簡(jiǎn)介
基于Java語(yǔ)言,實(shí)現(xiàn)了TCP協(xié)議下的QQ聊天和文件傳輸,主要涉及兩個(gè)原理:
1. Socket編程實(shí)現(xiàn)客戶端和服務(wù)器之間傳遞消息
2. 文件傳輸
實(shí)現(xiàn)功能:
1.服務(wù)器和客戶端一對(duì)一聊天
2.用戶和用戶一對(duì)一聊天
3.用戶對(duì)外群發(fā)消息
4.服務(wù)器對(duì)外群發(fā)消息
5.服務(wù)器向用戶一對(duì)一傳輸文件
6.可視化界面
操作流程參考這里:
https://blog.csdn.net/DebugMakesMeHappy/article/details/103064461
1. Socket編程實(shí)現(xiàn)客戶端和服務(wù)器之間傳遞消息
2. 文件傳輸
實(shí)現(xiàn)功能:
1.服務(wù)器和客戶端一對(duì)一聊天
2.用戶和用戶一對(duì)一聊天
3.用戶對(duì)外群發(fā)消息
4.服務(wù)器對(duì)外群發(fā)消息
5.服務(wù)器向用戶一對(duì)一傳輸文件
6.可視化界面
操作流程參考這里:
https://blog.csdn.net/DebugMakesMeHappy/article/details/103064461

代碼片段和文件信息
import?javax.swing.*;
import?java.awt.*;
import?java.awt.event.WindowAdapter;
import?java.awt.event.WindowEvent;
import?java.io.BufferedReader;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.io.OutputStream;
import?java.io.PrintWriter;
import?java.net.Socket;
import?java.util.ArrayList;
public?class?Client?extends?Jframe?{
private?String?sendingMessage;
//獲取當(dāng)前用戶姓名
private?String?ClientName;
private?PrintWriter?out;
private?ArrayList?MyFriendsButton?=?new?ArrayList<>();
private?ArrayList?MyFriends?=?new?ArrayList<>();
//socket
private?Socket?s?=?null;
//Socket的輸入和輸出
private?BufferedReader?in?=?null;
//當(dāng)前客戶端是否退出
private?boolean?KeepingOnline?=?true;
//是否按下發(fā)送按鈕
private?boolean?IsPressedSendButton?=?false;
private?JPanel?FriendList;
//一對(duì)一聊天標(biāo)志
private?static?boolean?P2P?=?false;
public?static?void?main(String[]?args)?{
Client?client?=?new?Client(“客戶端“);
client.setVisible(true);
client.start();
}
//啟動(dòng)發(fā)送和接受任務(wù)
private?void?start()?{
try?{
//?建立客戶端socket
s?=?new?Socket(“127.0.0.1“?5432);
//?獲得socket輸出out,自動(dòng)刷新
out?=?new?PrintWriter(s.getOutputStream()?true);
//?獲取輸入
in?=?new?BufferedReader(new?InputStreamReader(s.getInputStream()));
//服務(wù)器分配用戶名
ClientName?=?in.readLine();
//在界面顯示
MessageRecords.append(“Hello?“?+?ClientName?+?“!\n“);
this.FriendList.updateUI();
//創(chuàng)建接收消息的線程
new?Thread(new?ClientThread(this)).start();
//用戶保持在線,且按下了發(fā)送按鈕
while?(KeepingOnline)?{
try?{
Thread.sleep(2);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
if?(IsPressedSendButton)?{
//發(fā)送消息時(shí)附上自己的用戶名
//客戶端發(fā)送的消息包含?用戶名+消息文本
out.println(ClientName?+?sendingMessage);
IsPressedSendButton?=?false;
}
}
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
if?(s?!=?null)?{
try?{
s.close();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
}
private?class?ClientThread?implements?Runnable?{
Client?client;
ClientThread(Client?client)?{
this.client?=?client;
addWindowListener(new?WindowAdapter()?{
@Override
public?void?windowClosing(WindowEvent?e)?{
super.windowClosing(e);
System.out.println(ClientName+“下線“);
client.out.println(ClientName+“quit“);
KeepingOnline=false;
}
});
}
private?void?receive()?{
//接收服務(wù)端消息
try?{
//接收到的消息
//send(ClientName?+?“?“?+?MessageInformation?+?“\r“?+?receivedMessage);
//包含用戶名、時(shí)間信息和消息內(nèi)容
String?receivedMessage?=?in.readLine();
if?(receivedMessage?!=?null)?{
//?當(dāng)接收到的信息中包含“IsOnline“,說明有新的用戶上線
//?這時(shí)處理一下新的用戶
//?在通知某用戶上線時(shí),后面會(huì)發(fā)來數(shù)條信息,這其中包括
//?1.當(dāng)前用戶個(gè)數(shù)
//?2.所有用戶名稱
if?(received
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????301??2019-11-12?22:21??TCPTalkingRoom\.classpath
?????文件????????390??2019-11-14?11:24??TCPTalkingRoom\.project
?????文件????????598??2019-11-12?22:21??TCPTalkingRoom\.settings\org.eclipse.jdt.core.prefs
?????文件?????????26??2019-11-14?10:11??TCPTalkingRoom\1.txt
?????文件???????1442??2019-11-14?11:24??TCPTalkingRoom\bin\Client$ClientThread$1.class
?????文件???????6005??2019-11-14?11:24??TCPTalkingRoom\bin\Client$ClientThread.class
?????文件???????7768??2019-11-14?11:24??TCPTalkingRoom\bin\Client.class
?????文件???????2623??2019-11-14?11:24??TCPTalkingRoom\bin\Server$SendMsg.class
?????文件???????9192??2019-11-14?11:24??TCPTalkingRoom\bin\Server$ServerThread.class
?????文件???????8139??2019-11-14?11:24??TCPTalkingRoom\bin\Server.class
?????文件???????1401??2019-11-14?11:24??TCPTalkingRoom\bin\TCPClient.class
?????文件???????1775??2019-11-14?11:24??TCPTalkingRoom\bin\TCPServer.class
?????文件??????10478??2019-11-14?11:12??TCPTalkingRoom\src\Client.java
?????文件??????16647??2019-11-14?11:12??TCPTalkingRoom\src\Server.java
?????文件???????1356??2019-11-14?00:01??TCPTalkingRoom\src\TCPClient.java
?????文件???????1516??2019-11-14?09:56??TCPTalkingRoom\src\TCPServer.java
?????文件??????28462??2019-11-13?23:47??TCPTalkingRoom\timg.jpg
?????目錄??????????0??2019-11-12?22:21??TCPTalkingRoom\.settings
?????目錄??????????0??2019-11-14?11:24??TCPTalkingRoom\bin
?????目錄??????????0??2019-11-13?23:45??TCPTalkingRoom\src
?????目錄??????????0??2019-11-14?11:23??TCPTalkingRoom
-----------?---------??----------?-----??----
????????????????98119????????????????????21
評(píng)論
共有 條評(píng)論