上位机之网络编程Socket调试(一)


调试网络socket的东西,下载一个调试助手相当有必要,可以起到事半工倍的效果。软件界面如下图所示。

 

在设计上位机时,需要利用java里的socket类中的相关函数编写一个客户端程序。经过调试,已可用,代码如下。

package person.hushunfeng; /** * * @author hushunfeng * */
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; public class ClientSocket { public static String clientName = "hushunfeng"; public static int portNO = 3333; public static boolean connectStaus = false; public ClientSocket() throws IOException {         //这里设计的构造方法就是给这个类传ip地址。 // public static void main(String[] args) throws Exception { // InetAddress ipAddress = InetAddress.getByName("localhost"); 
 System.out.println(NetConnection.ipAddress); Socket socket = new Socket(NetConnection.ipAddress,portNO); try { System.out.println("socketsever:"+socket); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); connectStaus = true; System.out.println("已连接!!!"); out.println("ABCDE"); // out.println("byebye"); // String str = in.readLine(); // System.out.println(str);
        } catch(Exception e) { System.out.println("连接失败!!!"); System.out.println(e.getMessage()); } finally {  System.out.println("close the Client socket and the io.");  socket.close();
 } } }

设计的界面代码如下:

package person.hushunfeng;

import java.io.IOException;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;

public class NetConnection {

    protected Shell shell;
    public static Text ipInput;
    /**
     * Launch the application.
     * @param args
     */
    public static String ipAddress;
    public static void main(String[] args) {
        try {
            NetConnection window = new NetConnection();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 262);
        shell.setText("\u7F51\u7EDC\u8FDE\u63A5");
        
        Group grpip = new Group(shell, SWT.NONE);
        grpip.setFont(SWTResourceManager.getFont("宋体", 12, SWT.NORMAL));
        grpip.setBounds(10, 10, 422, 209);
        
        Label lblNewLabel = new Label(grpip, SWT.NONE);
        lblNewLabel.setFont(SWTResourceManager.getFont("宋体", 14, SWT.NORMAL));
        lblNewLabel.setBounds(148, 23, 185, 31);
        lblNewLabel.setText("\u4E0B\u4F4D\u673AIP\u8BBE\u7F6E");
        
        Label lblip = new Label(grpip, SWT.NONE);
        lblip.setFont(SWTResourceManager.getFont("宋体", 12, SWT.NORMAL));
        lblip.setBounds(52, 75, 71, 31);
        lblip.setText("IP\u5730\u5740\uFF1A");
        
        ipInput = new Text(grpip, SWT.BORDER);
        ipInput.setBounds(129, 76, 191, 21);
        
        //"连接"按钮相关
        final Button connectButton = new Button(grpip, SWT.NONE);
        connectButton.setTouchEnabled(true);
        connectButton.setBounds(62, 150, 92, 31);
        connectButton.setText("\u8FDE\u63A5");
        connectButton.addMouseListener(new MouseListener(){
            public void mouseDown(MouseEvent e) {
                getIpAddress();
                try {
                    new ClientSocket();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                if(ClientSocket.connectStaus==true) {
                    MessageDialog.openInformation(shell,"连接状态",'\n'+"已成功连接!");
                //    System.out.println(ipAddress);
                    connectButton.setEnabled(false);
                }
                else 
                    MessageDialog.openInformation(shell,"连接状态",'\n'+"连接失败!");
            }

            @Override
            public void mouseDoubleClick(MouseEvent e) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseUp(MouseEvent e) {
                // TODO Auto-generated method stub
                
            }

    });
        
        //"断开"按钮相关
        final Button unconnectButton = new Button(grpip, SWT.NONE);
        unconnectButton.setEnabled(false);
        unconnectButton.setText("\u65AD\u5F00");
        unconnectButton.setBounds(254, 150, 92, 31);
    }
    
    public static String getIpAddress() {
        ipAddress = ipInput.getText();
        return ipAddress;
    }
}

界面效果图为下图所示。

 

目前已能够根据ip地址和端口号给下位机(ARM)发送数据,数据反馈部分未做。另外,数据发送的具体形式未做。

现在出现的问题:Socket程序中调用输入数据的等相关函数时,程序会卡死,原因未知,或许涉及到一些线程的问题。

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM