⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.java

📁 <j2me 开发精解> 詹建光著 里所有的源码。对J2me的开发相当有帮助
💻 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 + -