Java聊天套接字读取和发送数据
我成功开发了一个应用程序,您可以创建/连接到服务器。我有一个名为Person的类,其中有一个公共静态LinkedList。在此列表中,我存储连接到服务器的客户端。服务器/客户端类位于同一个包中。服务器和客户端类是扩展线程(它们在后台工作) 我想做的事Java聊天套接字读取和发送数据,java,multithreading,sockets,swt,chat,Java,Multithreading,Sockets,Swt,Chat,我成功开发了一个应用程序,您可以创建/连接到服务器。我有一个名为Person的类,其中有一个公共静态LinkedList。在此列表中,我存储连接到服务器的客户端。服务器/客户端类位于同一个包中。服务器和客户端类是扩展线程(它们在后台工作) 我想做的事 我想将联机客户端列表(LinkedList)发送给连接到服务器的所有客户端 我想从客户端读取数据(StyledText中的字符串),并将其写入全局主聊天区(StyledText) (类似于mIRC程序) 我整天都在阅读和搜索,但我从来没有看到关于“
DialogServer dialog = new DialogServer(new Shell());
dialog.create();
if(dialog.open() == Window.OK){
new Server(serverAddress).start(); //dialog sets serverAddress as a String IP
}
DialogConnect dialog = new DialogConnect(new Shell());
dialog.create();
if(dialog.open() == Window.OK){
new Client(connectAddress, connectNickname).start(); // dialog sets String parameters. new Client start a new Thread for a client.
}
服务器类:
public class Server extends Thread{
private static ServerSocket serverSocket;
private static Socket socket;
private static String address;
public Server(String address){
this.address = address;
}
public void run(){
try {
serverSocket = new ServerSocket(5000, 10, InetAddress.getByName(address));
View.serverUp = true;
View.log("Server is up. Listening on " + address + ":5000");
Person p = new Person(View.nickname, true, 100.0);
Person.listPeople.add(p); //add ADMIN to static LinkedList
while(true){
socket = serverSocket.accept();
new Client(socket).start(); // client class thread
refresOnlineList(); // refresh UI table
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void refresOnlineList(){
View.display.syncExec(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
View.tableViewer.refresh();
// TableViewer which contains online client list
}
});
}
}
public class Client extends Thread{
private static Socket socket;
private static String nickname;
public Client(Socket socket){
this.socket = socket;
}
public Client(String address, String nickname){
socket = new Socket();
try {
socket.connect(new InetSocketAddress(address, 5000), 10);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
View.log("Cannot connect to server.");
}
this.nickname = nickname;
}
public void run(){
try {
Person p = new Person(nickname, false, 15.4);
Person.listPeople.add(p); // add PERSON to static LinkedList
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
要连接到服务器的对话框:
DialogServer dialog = new DialogServer(new Shell());
dialog.create();
if(dialog.open() == Window.OK){
new Server(serverAddress).start(); //dialog sets serverAddress as a String IP
}
DialogConnect dialog = new DialogConnect(new Shell());
dialog.create();
if(dialog.open() == Window.OK){
new Client(connectAddress, connectNickname).start(); // dialog sets String parameters. new Client start a new Thread for a client.
}
客户端类:
public class Server extends Thread{
private static ServerSocket serverSocket;
private static Socket socket;
private static String address;
public Server(String address){
this.address = address;
}
public void run(){
try {
serverSocket = new ServerSocket(5000, 10, InetAddress.getByName(address));
View.serverUp = true;
View.log("Server is up. Listening on " + address + ":5000");
Person p = new Person(View.nickname, true, 100.0);
Person.listPeople.add(p); //add ADMIN to static LinkedList
while(true){
socket = serverSocket.accept();
new Client(socket).start(); // client class thread
refresOnlineList(); // refresh UI table
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void refresOnlineList(){
View.display.syncExec(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
View.tableViewer.refresh();
// TableViewer which contains online client list
}
});
}
}
public class Client extends Thread{
private static Socket socket;
private static String nickname;
public Client(Socket socket){
this.socket = socket;
}
public Client(String address, String nickname){
socket = new Socket();
try {
socket.connect(new InetSocketAddress(address, 5000), 10);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
View.log("Cannot connect to server.");
}
this.nickname = nickname;
}
public void run(){
try {
Person p = new Person(nickname, false, 15.4);
Person.listPeople.add(p); // add PERSON to static LinkedList
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在Eclipse RCP 3.8中开发,您的目标可分为三个任务:
我建议您从控制台应用程序(客户端和服务器)开始,以摆脱创建UI的负担。完成后,您可以创建一些UI并将事件绑定到其中。请发布一个特定问题。很难说出你想要什么。