📄 client.java
字号:
package com.j2medev.ch6.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
public class Client implements Runnable,CommandListener{
private ChatMIDlet midlet = null;
private Form form = null;
private Sender sender = null;
private boolean stop = false;
private String serverIP = "";
private int port = -1;
private TextField send = new TextField("输入内容:","", 30, TextField.ANY);
public static final Command sendCommand = new Command("发送",Command.OK, 1);
public Client(ChatMIDlet midlet) {
this.midlet = midlet;
form = new Form("客户端");
form.append(send);
form.addCommand(sendCommand);
form.setCommandListener(this);
init();
midlet.setCurrent(form);
}
public void init(){
new Thread(){
public void run(){
try{
//连接第三方服务器读取socket服务器的ip地址和端口
HttpConnection conn = (HttpConnection)Connector.open("http://localhost:8080/post/publish");
conn.setRequestMethod(HttpConnection.POST);
conn.setRequestProperty("Conntent-Type", "application/octet-stream");
DataOutputStream dos = conn.openDataOutputStream();
dos.writeByte(101);//向服务器发送命令,要读取服务器的ip和端口
dos.close();
DataInputStream dis = conn.openDataInputStream();
serverIP = dis.readUTF();//读取IP
port = dis.readInt();//读取端口
//唤醒Client线程连接服务器
synchronized(midlet){
midlet.notify();
}
dis.close();
conn.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}.start();
}
public void run(){
try{
//等待另外的线程从第三方服务器读取Socket服务器的IP和端口
synchronized(midlet){
midlet.wait();
}
SocketConnection sc = (SocketConnection)Connector.open("socket://"+serverIP+":"+port);
DataOutputStream dos = sc.openDataOutputStream();
sender = new Sender(dos);
}catch(IOException ex){
ex.printStackTrace();
}catch(InterruptedException ex){
}
}
public void commandAction(Command cmd,Displayable displayable){
if(cmd == sendCommand){
//发送数据
sender.send(send.getString());
Alert alert = new Alert("通知", "成功发送"+send.getString(), null, AlertType.CONFIRMATION);
alert.setTimeout(2000);
send.setString("");
midlet.setCurrent(alert, form);
}
}
//停止线程
public void stop() {
stop = true;
if (sender != null) {
sender.stop();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -