客户端无法从单独的类发送消息

时间:2015-05-31 07:00:55

标签: android sockets tcp android-studio client

我在android studio上创建了一个套接字程序。首先,我在主类上创建它,它正在工作。在这个网站的帮助下,我将连接分开并断开连接。现在,当客户端在服务器上发送消息时出现问题。每当我写一个字母时,输出只是一个空白区域。

  

单独的课程

public class SocketClient extends Thread {

String serverm = null;

Socket client;
String Socketdata;
Context context;
String message;
String address;
public boolean mRun = true;
private PrintWriter printwriter;

public SocketClient (String address, Context context, String message  )
{
    this.address = address;
    this.context = context;
    this.message = message;
}

@Override
public void run(){
    mRun = true;
    try {
        client = new Socket(address, 3818);
        BufferedReader mBufferIn = new BufferedReader(
                new InputStreamReader(client.getInputStream()));

        while (mRun) {
            serverm = mBufferIn.readLine();

            if (serverm != null) {
                System.out.println(serverm);
                Socketdata = serverm;
            }
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void stopSocket()
{
    if(client !=null)
    {
        Toast.makeText(context, "disconnected", Toast.LENGTH_LONG).show();
        try {
            client.close();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    else{
        Toast.makeText(context, "socket not found", Toast.LENGTH_LONG).show();
    }
}


public void SendSocket()
{
    if (message != null) {
        try {

            printwriter = new PrintWriter(client.getOutputStream(),true);
            printwriter.write(message + "\r\n"); // write the message to output stream
            printwriter.flush();

        }catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    Toast.makeText(context, "sent", Toast.LENGTH_LONG).show();
}

}

  

主要课程

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textField = (EditText) findViewById(R.id.message); // reference to the text field
    Connect = (Button) findViewById(R.id.connect); // reference to the connect button
    Disconnect = (Button) findViewById(R.id.disconnect); // reference to the connect button
    Send = (Button) findViewById(R.id.send); // reference to the send button
    editTextAddress = (EditText) findViewById(R.id.address); // reference to the address

    Disconnect.setOnClickListener(DisconnectOnClickListener);
    Connect.setOnClickListener(ConnectOnClickListener);
    Send.setOnClickListener(SendOnClickListener);
}

//Button Send
OnClickListener SendOnClickListener = new OnClickListener() {

    public void onClick(View v) {

        thread.SendSocket();
        textField.setText(""); // Reset the text field to blank
        }

};

//Button Disconnect
OnClickListener DisconnectOnClickListener = new OnClickListener() {

    public void onClick(View v) {
        thread.stopSocket();
    }

};

//Button Connect
OnClickListener ConnectOnClickListener = new OnClickListener() {

    public void onClick(View v) {
        Toast.makeText(getApplicationContext(),"connected",Toast.LENGTH_LONG).show();
        thread = new SocketClient(editTextAddress.getText().toString(), getApplicationContext(), textField.getText().toString());

        thread.start();
    }
};

1 个答案:

答案 0 :(得分:0)

现在我知道我失踪了什么。很抱歉给您带来不便。

  

单独的课程

public void SendSocket(String newMessage ) {
    if (newMessage != null) {
        try {
            printwriter = new PrintWriter(socket.getOutputStream(),true);
            printwriter.write(newMessage + "\r\n"); // write the message to output stream
            printwriter.flush();

        }catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

}

  

主要班级

View.OnClickListener SendOnClickListener = new View.OnClickListener() {

    public void onClick(View v) {


        thread.SendSocket(textField.getText().toString());

    }

};