📄 udptalks.java
字号:
package client;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JTree;
public class udptalks extends Thread{
public String localusername; //记录当前用户的用户名
private DatagramSocket GetquitSock; //UDP通信的Socket
private int localport;
public Client client;
private String getmessage;
private DatagramPacket Getpacket;
private String 对方 = null;
private byte[] buff = new byte[1024];
public udptalks(int localport,String localusername,Client client) { //利用本地端口,自身用户名,主方法Client建立UDP通信 this.localusername = localusername;
this.client = client;
this.localport = localport;
this.localusername = localusername;
System.out.println("本地端口是:"+localport);
Getpacket = new DatagramPacket(buff, buff.length); //建立一个接收的UDP数据报的Packet
try {
GetquitSock = new DatagramSocket(localport); //建立一个接收UDP数据报的Socket
} catch (SocketException ex) {
//ex.printStackTrace();
System.out.println("建立接受的DatagramSocket产生异常");
}
}
public void run(){
boolean stop = false;
while(!stop){
if(GetquitSock == null)
break;
else{
try {
GetquitSock.receive(Getpacket);
int length=Getpacket.getLength();
InetAddress adress=Getpacket.getAddress();
int port=Getpacket.getPort();
System.out.println("接收到服务的数据报");
getmessage=new String(Getpacket.getData(),0,length);
System.out.println("源ip地址:"+Getpacket.getAddress());
System.out.println("源ip地址:/"+client.gethost());
System.out.println("已进入");
dealwithserver(getmessage);
} catch (IOException ex) {
// ex.printStackTrace();
System.out.println("接受数据报产生异常");
}
}
}
}
public boolean sent_data(String Internet,int port,String message) { //在客户端建立一个发送数据报的UDP套接字
DatagramSocket mail_data = null;
DatagramPacket data_pack = null;
byte buffer[]=message.trim().getBytes();
InetAddress address = null;
try {
address = InetAddress.getByName(Internet);
data_pack = new DatagramPacket(buffer,buffer.length, address,port);
try {
mail_data=new DatagramSocket();
} catch (SocketException ex) {
// ex.printStackTrace();
System.out.println("发送套接字建立失败");
}
} catch (UnknownHostException ex) {
//ex.printStackTrace();
System.out.println("目标地址找不到");
}
System.out.println("发送数据报到:"+ Internet);
try {
mail_data.send(data_pack);
} catch (IOException ex) {
ex.printStackTrace();
}
return true;
}
public void sentfriendsdata(String username,String content){ //聊天室向朋友发送数据报的UDP套接字
DatagramSocket mail_data = null;
DatagramPacket data_pack = null;
String address = client.onlinefriends.get(username);
if(!address.equals("")){
String[] addre_port = address.split("/");
String message = localusername + ":" + content;
byte buffer[]=message.trim().getBytes();
InetAddress addre = null;
try {
addre = InetAddress.getByName(addre_port[0]);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int port = Integer.valueOf(addre_port[1]);
data_pack = new DatagramPacket(buffer,buffer.length, addre,port);
try {
mail_data=new DatagramSocket();
} catch (SocketException ex) {
// ex.printStackTrace();
System.out.println("发送套接字建立失败");
}
try {
mail_data.send(data_pack);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void dealwithserver(String st){ //处理接收的数据报
if(st.startsWith("好友离线:")){
String username = st.substring(st.indexOf(":")+1,st.length());
System.out.println("离线好友: "+username);
client.onlinevector.remove(username);
client.downlinevector.add(username);
client.onlinefriends.remove(username);
JTree tree = client.clientgui.mytree.checkJTree();
client.clientgui.mytree.changeJTree(tree);
//更新界面
}else if(st.startsWith("好友上线:")){
String usermessage = st.substring(st.indexOf(":")+1,st.length());
if(!usermessage.equals("")){
System.out.println("好友上线的信息: "+usermessage);
String[] user = usermessage.split(",");
client.onlinefriends.put(user[0], user[1]);
client.onlinevector.add(user[0]);
client.downlinevector.remove(user[0]);
JTree tree = client.clientgui.mytree.checkJTree();
client.clientgui.mytree.changeJTree(tree);
//更新界面
}
}else if(st.startsWith("加好友:")){
String state = st.substring(st.indexOf(":")+1,st.length());
if(state.equals("success")){
// client.getchat().displaystate("添加成功");
System.out.println("添加好友成功");
}else{
//client.getchat().displaystate("添加失败");
System.out.println("添加好友失败");
}
}else if(st.startsWith("是否在线:")){
sent_data(client.gethost(),5748,"在线:ok");
}else if(st.startsWith("加入群组:")){
String messages = st.substring(st.indexOf(":")+1,st.length());
if(messages.equals("1111")){
client.clientgui.getGroupmessage().label2.setText("添加成功");
String[] groupa = new String[client.mygroups.length+1];
for(int i = 0; i < client.mygroups.length; i++ ){
groupa[i] = client.mygroups[i];
}
groupa[client.mygroups.length] = "1111";
client.mygroups = groupa;
JTree tree = client.clientgui.mytree.checkJTree();
client.clientgui.mytree.changeJTree(tree);
}else if(messages.equals("2222")){
client.clientgui.getGroupmessage().label2.setText("添加成功");
String[] groupa = new String[client.mygroups.length+1];
for(int i = 0; i < client.mygroups.length; i++ ){
groupa[i] = client.mygroups[i];
}
groupa[client.mygroups.length] = "2222";
client.mygroups = groupa;
JTree tree = client.clientgui.mytree.checkJTree();
client.clientgui.mytree.changeJTree(tree);
}else{
client.clientgui.getGroupmessage().label2.setText(messages);
}
}else if(st.startsWith("1111:")||st.startsWith("2222:")){
// String[] online = {"1111","22222"};
// String[] downline = {"3333","3333"};
String username = st.substring(st.indexOf(":"));
String[] usernames = username.split(",");
/* if(!usernames[0].equals("null")){
String[] online = usernames[0].split(",");
}
if(!usernames[1].equals("null")){
String[] downline = usernames[1].split(",");
}*/
if(st.startsWith("1111:")){
GrouptalkGUI grouptalkgui = new GrouptalkGUI(usernames,(Groupworks)client.group1.get("1111"),client.localname);
((Groupworks)client.group1.get("1111")).grouptalk = grouptalkgui;
}
if(st.startsWith("2222:")){
GrouptalkGUI grouptalkgui = new GrouptalkGUI(usernames,(Groupworks)client.group1.get("2222"),client.localname);
((Groupworks)client.group1.get("2222")).grouptalk = grouptalkgui;
}
}else if(st.startsWith("通知:")){
String messages = st.substring(st.indexOf(":")+1,st.length());
talkGUI talk = new talkGUI("服务器",client.clientgui,this);
talk.displaymessage("服务器",messages);
System.out.println("服务器通知:" + messages);
}else{
if(!st.equals("")){
System.out.println("好友发的信息为:"+st);
String username = st.substring(0,st.indexOf(":"));
String messages = st.substring(st.indexOf(":")+1,st.length());
talkGUI talking = client.clientgui.serch(username);
if(talking != null){
talking.displaymessage(username, messages); //将好友传来的数据发布到聊天框中
}else{
talkGUI talk = new talkGUI(username,client.clientgui,this);
talk.displaymessage(username,messages);
client.clientgui.inserttalkfriends(username,talk);
}
}
}
}
public void dealwithclient(String st){
对方 = st.substring(0,st.indexOf(":")-1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -