chater.java
来自「简单清晰具有启发性的实例。 Net1和Client1类实现了TCP的简单应用。」· Java 代码 · 共 497 行 · 第 1/2 页
JAVA
497 行
Chater.setMessage("connection failed\n"
+"your friend may be not in line\n"
+"check your connection to the internet\n");
setVisible(false);
}
}
}
}
class Connecting extends Thread{
Socket s;
private Chater mainFrame;
int t1;
Connecting(Socket soc, Chater parent){
s = soc;
t1 = 4;
mainFrame = parent;
start();
}
public void run(){
String str = "";
byte[] buff = new byte[64];
try{
DatagramSocket ds = new DatagramSocket(s.getLocalPort());
DatagramPacket dp = new DatagramPacket(buff,buff.length);
ds.receive(dp);//会阻塞;
str = new String(dp.getData(),dp.getOffset(),dp.getLength());
System.out.println("received:"+str);
mainFrame.appendMessage("\nFrom Server "+dp.getAddress()+":\n"+str);
}catch(Exception e){
System.out.println("connection failed");
mainFrame.setTheState(Chater.DISCONNECTED);
mainFrame.setMessage("connection failed\n"
+"your friend may be not in line\n"
+"check your connection to the internet\n");
}
if(str.equals("#OK")){
System.out.println("connection affirmed:");
System.out.println("socket = "+s);
Chater.remoteAddr = s.getInetAddress();
Chater.remotePort = s.getPort();
Chater.setTheState(Chater.CONNECTED);
Chater.setMessage("You have connected to your frend.\naddress:"+s.getInetAddress());
new Receiver(s,mainFrame);
try{
// s.close();
}catch(Exception ex){
ex.printStackTrace();
}
Chater.tf.setEditable(true);
mainFrame.m_command.add(mainFrame.command_disconnect);
mainFrame.m_File.add(mainFrame.file_send);
mainFrame.file_send.addActionListener(new File_send(mainFrame,s));
mainFrame.command_connect.setEnabled(false);
}
else
{
System.out.println("connection failed");
Chater.setTheState(Chater.DISCONNECTED);
Chater.setMessage("connection dinied\n");
}
}
class File_send implements ActionListener
{
private Chater mainFrame;
private Socket sock;
File_send(Chater mainF,Socket s)
{
mainFrame = mainF;
sock = s;
}
public void actionPerformed(ActionEvent e)
{
String load_File;
FileDialog fd = new FileDialog(mainFrame, "Chose a file to send",FileDialog.LOAD);
fd.setVisible(true);
load_File = fd.getFile();
mainFrame.send("#FILE#"+load_File);
String res = "";
byte[] buff = new byte[64];
try
{
mainFrame.appendMessage("\nWaiting for the response...");
DatagramSocket ds = new DatagramSocket(sock.getLocalPort());
DatagramPacket dp = new DatagramPacket(buff,buff.length);
ds.receive(dp);//会阻塞;
res = new String(dp.getData(),dp.getOffset(),dp.getLength());
System.out.println("received:"+res);
mainFrame.appendMessage("\nFrom Remote "+dp.getAddress()+":\n"+res);
}
catch(Exception ee)
{
System.out.println(" failed");
ee.printStackTrace();
}
if(res.equals("#OK"))
{
try
{
BufferedReader in = new BufferedReader(
new FileReader(load_File));
BufferedWriter out =new BufferedWriter(
new OutputStreamWriter(sock.getOutputStream()));
int ch;
while((ch = in.read()) != -1)
out.write(ch);
}
catch(IOException ex)
{
String err = ex.toString();
System.out.println(err);
}
mainFrame.appendMessage("\nThe file "+load_File+
" has been succesfully sended.");
}
else
mainFrame.appendMessage("\nFile Sending is denied.");
}
}
}
class Receiver extends Thread{
Socket sock;
Chater mainFrame;
Receiver(Socket s, Chater parent){
sock = s;
mainFrame = parent;
start();
}
public void run(){
String str;
byte[] buff = new byte[64];
try
{
DatagramSocket ds = new DatagramSocket(sock.getLocalPort());
DatagramPacket dp = new DatagramPacket(buff,buff.length);
while((Chater.getTheState() == Chater.CONNECTED)
|| (Chater.getTheState() == Chater.CONNECTING)){
ds.receive(dp);//会阻塞;
str = new String(dp.getData(),dp.getOffset(),dp.getLength());
System.out.println("received:"+str);
mainFrame.appendMessage("\nFrom "+dp.getAddress()+":\n"+str);
if(str.equals("#DISCONNECT"))
{
mainFrame.setTheState(Chater.DISCONNECTED);
System.out.println("Your friend has left.\n");
mainFrame.setMessage("Your friend has left.\n");
mainFrame.tf.setEditable(false);
mainFrame.m_command.remove(mainFrame.command_disconnect);
mainFrame.m_File.remove(mainFrame.file_send);
mainFrame.command_connect.setEnabled(true);
}
if(str.substring(0,6).equals("#FILE#") && Chater.getTheState() == Chater.CONNECTED)
{
str = str.substring(6);
mainFrame.appendMessage("\n"+str);
int answer = JOptionPane.showConfirmDialog(null,
"\nYour friend wants to send you a file"
+"\nFile name: "
+ str
+ "\nDo you agree?",
"accept file",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(answer == JOptionPane.YES_OPTION)
{
try
{
BufferedReader in = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
BufferedWriter out =new BufferedWriter(
new FileWriter(str));
mainFrame.send("#OK");
int ch;
while((ch = in.read()) != -1)
out.write(ch);
mainFrame.appendMessage("\nThe file "+str+" has been succesfully recieved.");
}
catch(IOException ex)
{
String err = ex.toString();
System.out.println(err);
}
}
else
{
mainFrame.appendMessage("\n You have cancled the file sending.");
mainFrame.send("#NO");
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class Server1 extends Thread{
private ServerSocket sock;
private Chater mainFrame;
Server1(ServerSocket s,Chater f){
System.out.println("Start:\n"+s);
sock = s;
mainFrame = f;
start();
}
public void run(){
try{
Socket s = sock.accept();
int answer = JOptionPane.showConfirmDialog(null,
"Your friend from:\n"
+ s.getInetAddress()
+ "Do you agree?",
"accept connection",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(answer == JOptionPane.YES_OPTION){
Chater.remoteAddr = s.getInetAddress();
Chater.remotePort = s.getPort();
mainFrame.send("#OK");
System.out.println("Connection accepted:\n"+s);
System.out.println("Listening finished");
Chater.setTheState(Chater.CONNECTED);
mainFrame.m_command.add(mainFrame.command_disconnect);
mainFrame.m_File.add(mainFrame.file_send);
mainFrame.command_connect.setEnabled(false);
new Receiver(s,mainFrame);
// s.close();
Chater.appendMessage("Connection accepted:\n"+s);
Chater.tf.setEditable(true);
}
else{
Chater.remoteAddr = s.getInetAddress();
Chater.remotePort = s.getPort();
mainFrame.send("#NO");
Chater.appendMessage("Connection denied:\n"+s);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?