📄 chatclientframe.java~493~
字号:
}
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 setsp(){
int height=10;
Point p = new Point();
p.setLocation(0,this.jTextArea1.getLineCount()*height);
jScrollPane1.getViewport().setViewPosition(p);
}
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();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -