?? chatclientframe.java
字號:
}
}
else if (keyword.equalsIgnoreCase("SOU")) {
String broadcast = str.nextToken();
souname= str.nextToken();
String soukey=str.nextToken();
if(soukey.equalsIgnoreCase("REQ")){
parent.jTextArea1.append(souname + "請求語音聊天\n");
souip=str.nextToken();
jButton4.setEnabled(false);
jButton6.setEnabled(true);
jButton7.setEnabled(true);
}
else if(soukey.equalsIgnoreCase("CST")){
parent.jTextArea1.append(souname + "同意語音聊天\n");
souip=str.nextToken();
try
{
Socket cli=new Socket(souip,5999);
parent.cap=new Capture(cli);
parent.cap.start();
}
catch(Exception ee){
jTextArea1.append("Error:"+ee+"\n");
}
}
else if(soukey.equalsIgnoreCase("REF")){
parent.jTextArea1.append(souname + "拒絕語音聊天\n");
jButton4.setEnabled(true);
jButton8.setEnabled(false);
}
else if(soukey.equalsIgnoreCase("QUIT")){
parent.jTextArea1.append("與"+souname + "語音聊天結束\n");
jButton4.setEnabled(true);
jButton8.setEnabled(false);
try
{
if(player!=null){
player.stop();
}
if(cap!=null){
cap.stop();
}
}
catch(Exception ee){
jTextArea1.append("Error:"+ee+"\n");
}
}
}
else if (keyword.equalsIgnoreCase("FILE")) {
String broadcast = str.nextToken();
filefname= str.nextToken();
String filekey=str.nextToken();
if(filekey.equalsIgnoreCase("REQ")){
jButton5.setEnabled(false);
jButton9.setEnabled(true);
jButton10.setEnabled(true);
filesip=str.nextToken();
filename=str.nextToken();
parent.jTextArea1.append(filefname+"發送文件"+filename+"\n");
}
else if(filekey.equalsIgnoreCase("CST")){
long len=Long.parseLong(str.nextToken());
parent.jTextArea1.append(filefname + "同意接收文件"+filesname+"!\n");
filesend=new filesend(filespath+filesname,len);
StringBuffer fmessage=new StringBuffer("FILE:");
fmessage.append(filefname+":");
fmessage.append(listen.name);
fmessage.append(":CSTB:");
ps.println(fmessage);
ps.flush();
}
else if(filekey.equalsIgnoreCase("CSTB")){
filesave = new filesave("D:\\Temp\\", filesip,filelen);
}
else if(filekey.equalsIgnoreCase("REF")){
jButton11.setEnabled(false);
jButton5.setEnabled(true);
parent.jTextArea1.append(filefname + "拒絕接收文件"+filesname+"!\n");
}
else if(filekey.equalsIgnoreCase("STOP")){
jButton11.setEnabled(false);
jButton5.setEnabled(true);
if(filesend!=null) {
filesend.stopfs();
parent.jTextArea1.append(filefname+"停止文件接收!文件停止發送!\n");
parent.jLabel6.setText("文件狀態:沒有文件傳輸");
}
else if(filesave!=null){
filesave.stopsf();
parent.jTextArea1.append(filefname+"停止文件發送!文件停止接收!\n");
parent.jLabel6.setText("文件狀態:沒有文件傳輸");
}
else
parent.jTextArea1.append("文件傳輸請求取消!\n");
}
}
else if (keyword.equalsIgnoreCase("WELCOME")) {
parent.jTextArea1.append(jTextField3.getText()+"登陸成功"+"\n");
count++;
parent.jLabel4.setText("目前用戶數:"+String.valueOf(count));
parent.jLabel5.setText("已連接");
parent.jList1.setModel(dld);
dld.addElement(jTextField3.getText());
}
else if (keyword.equalsIgnoreCase("FAULTNAME")) {
parent.jTextArea1.append("用戶名錯誤!\n");
}
}
}
}
public void disconnect(){
if(socket!=null){
try{
ps.println("QUIT:"+listen.name);
ps.flush();
socket.close();
count--;
}
catch(IOException e){
jTextArea1.append("Error:"+e);
}
}
}
void jButton3_actionPerformed(ActionEvent e) {
disconnect();
System.exit(0);
}
void this_windowClosing(WindowEvent e) {
disconnect();
System.exit(0);
}
void jButton4_actionPerformed(ActionEvent e) {
if(jList1.getSelectedValue()!=null){
jButton8.setEnabled(true);
jButton4.setEnabled(false);
jTextArea1.append("你請求與"+(String)jList1.getSelectedValue()+ "語音聊天\n");
StringBuffer message=new StringBuffer("SOU:");
message.append((String)jList1.getSelectedValue()+":");
message.append(listen.name);
message.append(":REQ:"+ip+":");
ps.println(message);
ps.flush();
player=new Playback(6000);
player.start();
}
else
JOptionPane.showMessageDialog(null, "請選擇用戶!", "錯誤!",JOptionPane.INFORMATION_MESSAGE);
}
void jButton6_actionPerformed(ActionEvent e) {
jButton6.setEnabled(false);
jButton7.setEnabled(false);
jButton8.setEnabled(true);
jTextArea1.append("你同意與"+souname+ "語音聊天\n");
StringBuffer message=new StringBuffer("SOU:");
message.append(souname+":");
message.append(listen.name);
message.append(":CST:"+ip+":");
ps.println(message);
ps.flush();
try
{
Socket cli=new Socket(souip,6000);
cap=new Capture(cli);
cap.start();
player=new Playback(5999);
player.start();
}
catch(Exception ee){
jTextArea1.append("Error:"+ee+"\n");
}
}
void jButton7_actionPerformed(ActionEvent e) {
jButton6.setEnabled(false);
jButton7.setEnabled(false);
jButton4.setEnabled(true);
jTextArea1.append("你拒絕與"+souname+ "語音聊天\n");
StringBuffer message=new StringBuffer("SOU:");
message.append(souname+":");
message.append(listen.name);
message.append(":REF:");
ps.println(message);
ps.flush();
}
void jButton8_actionPerformed(ActionEvent e) {
jButton4.setEnabled(true);
jButton8.setEnabled(false);
jTextArea1.append("與"+souname+"語音聊天結束\n");
StringBuffer message=new StringBuffer("SOU:");
message.append(souname+":");
message.append(listen.name);
message.append(":QUIT:");
ps.println(message);
ps.flush();
try
{
if(player!=null){
player.stop();
}
if(cap!=null){
cap.stop();
}
}
catch(Exception ee){
jTextArea1.append("Error:"+ee+"\n");
}
}
void jButton5_actionPerformed(ActionEvent e) {
if(jList1.getSelectedValue()!=null){
FileDialog f1=new FileDialog(this,"打開",FileDialog.LOAD);
f1.show();
filesname=f1.getFile();
filespath=f1.getDirectory();
if(filesname!=null) {
jButton5.setEnabled(false);
jButton11.setEnabled(true);
jTextArea1.append("你請求發送文件"+filesname+"給"+(String)jList1.getSelectedValue()+"!\n");
StringBuffer message=new StringBuffer("FILE:");
message.append((String)jList1.getSelectedValue()+":");
message.append(listen.name);
message.append(":REQ:"+ip+":"+filesname);
ps.println(message);
ps.flush();
}
}
else
JOptionPane.showMessageDialog(null, "請選擇用戶!", "錯誤!",JOptionPane.INFORMATION_MESSAGE);
}
void jButton9_actionPerformed(ActionEvent e) {
jButton9.setEnabled(false);
jButton10.setEnabled(false);
jButton11.setEnabled(true);
jTextArea1.append("你同意接收文件"+filename+ "!\n");
File myfile=new File("D:\\Temp\\"+filename);
if(myfile.exists()){
filelen=myfile.length();
jTextArea1.append("文件"+filename+ "已存在,繼續接收!\n");
}
else {
filelen=0;
}
StringBuffer message=new StringBuffer("FILE:");
message.append(filefname+":");
message.append(listen.name);
message.append(":CST:"+filelen+":");
ps.println(message);
ps.flush();
}
void jButton10_actionPerformed(ActionEvent e) {
jTextArea1.append("你拒絕接受文件"+filename+ "!\n");
StringBuffer message=new StringBuffer("FILE:");
message.append(filefname+":");
message.append(listen.name);
message.append(":REF:"+ip+":");
ps.println(message);
ps.flush();
}
void jButton11_actionPerformed(ActionEvent e) {
jButton11.setEnabled(false);
jButton5.setEnabled(true);
if(filesend!=null) {
filesend.stopfs();
jTextArea1.append("你停止發送文件"+filesname+ "!\n");
jLabel6.setText("文件狀態:沒有文件傳輸");
}
if(filesave!=null){
filesave.stopsf();
jTextArea1.append("你停止接收文件"+filename+ "!\n");
jLabel6.setText("文件狀態:沒有文件傳輸");
}
StringBuffer message=new StringBuffer("FILE:");
message.append(filefname+":");
message.append(listen.name);
message.append(":STOP:");
ps.println(message);
ps.flush();
}
class filesend {
int port = 8821;
long passedlen = 0;
long filelen;
String filePath;
Thread a;
ServerSocket ss;
Socket s;
RandomAccessFile fis;
DataOutputStream ps;
public filesend(String file,long len){
filePath=file;
filelen=len;
a=new watch();
a.start();
}
void stopfs(){
try{
a.stop();
ps.flush();
fis.close();
s.close();
ss.close();
}
catch (Exception e) {
}
}
class watch extends Thread {
public void run() {
try {
ss = new ServerSocket(port);
while (true) {
// 選擇進行傳輸的文件
File fi = new File(filePath);
// public Socket accept() throws
// IOException偵聽并接受到此套接字的連接。此方法在進行連接之前一直阻塞。
s = ss.accept();
jTextArea1.append("開始發送文件!\n");
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
dis.readByte();
fis = new RandomAccessFile(filePath, "rw");
ps = new DataOutputStream(s.getOutputStream());
//將文件名及長度傳給客戶端。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong( (long) fi.length());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
long lenl = (long) fi.length() / bufferSize;
passedlen = filelen / bufferSize;
fis.seek(filelen);
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
passedlen += 1;
if (read == -1) {
break;
}
jLabel6.setText("文件狀態:文件發送了" + (passedlen * 100 / lenl) + "%");
ps.write(buf);
}
ps.flush();
// 注意關閉socket鏈接哦,不然客戶端會等待server的數據過來,
// 直到socket超時,導致數據不完整。
fis.close();
s.close();
ss.close();
jTextArea1.append("文件傳輸完成!\n");
jLabel6.setText("文件狀態:沒有文件傳輸");
jButton11.setEnabled(false);
jButton5.setEnabled(true);
this.stop();
}
}
catch (Exception e) {
e.printStackTrace();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -