gpt4 book ai didi

java - Socket 程序中的错误,发送空白消息并且每条消息之前都有一些奇怪的符号

转载 作者:行者123 更新时间:2023-12-02 10:44:28 25 4
gpt4 key购买 nike

我正在制作一个可用于向实时服务器发送消息的应用程序。但是,每当创建新连接时,首先会发送一条空白消息,我不知道它是从哪里发送的。每条消息前面都有一些奇怪的符号,我不知道它们来自哪里。

下面是我的代码 fragment 和图像

package com.example.suraj.client_phase_2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

EditText etIpAddress;
EditText etPortNumber;
Button btnConnect;

EditText etSendMessage;
Button btnSend;

String ipAddress;
int portNumber = 0;
int i =0;

Thread m_objThreadClient;
static Socket clientSocket;
static ObjectOutputStream oos;


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

// Fields Initialized
etIpAddress = findViewById(R.id.etIpAddress);
etPortNumber = findViewById(R.id.etPortNumber);
btnConnect = findViewById(R.id.btnConnectDisconnect);

etSendMessage = findViewById(R.id.etMessage);
btnSend = findViewById(R.id.btnSend);

// Disabling send button.
btnSend.setEnabled(false);

// Connection and disconnection is created
try {
btnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if (i == 0) {
initialization();
connect();
} else {
disconnect();
}

}
});
}catch (Exception e){e.printStackTrace();}

//Sending messages
try {
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
String message = etSendMessage.getText().toString();
oos = new
ObjectOutputStream(clientSocket.getOutputStream());
oos.writeObject(message);
//showToast(message);
} catch (IOException e) {
e.printStackTrace();
}

}
});
}catch (Exception e){e.printStackTrace();}

}


// Retrieving ipAddress and portNumber
public void initialization(){

try {
ipAddress = etIpAddress.getText().toString();
portNumber = Integer.valueOf(etPortNumber.getText().toString());
// showToast(ipAddress+""+portNumber);

}catch(Exception e){e.printStackTrace();}
}



// Creating Socket connection
public void connect(){

try {
if (ipAddress == "" || portNumber == 0) {
showToast("Please Enter IpAddress and Port Number ");
} else {

socketConnectDisconnect();
btnConnect.setText("Disconnect");
showToast("Connected");
//Toast.makeText(this, "Connected" ,
Toast.LENGTH_SHORT).show();

//Enabling send button
btnSend.setEnabled(true);
etIpAddress.setEnabled(false);
etPortNumber.setEnabled(false);
i = 1;
}
}catch (Exception e){e.printStackTrace();}
}



// Disconnecting Socket connection
private void disconnect() {
try {
socketConnectDisconnect();
btnConnect.setText("Connect");
showToast("Disconnected");
//Toast.makeText(this, "Disconnected" ,
Toast.LENGTH_SHORT).show();
//Disabling send button
btnSend.setEnabled(false);
etIpAddress.setEnabled(true);
etPortNumber.setEnabled(true);
i = 0;
}catch (Exception e){e.printStackTrace();}
}

// establishing socket connection
public void socketConnectDisconnect(){
m_objThreadClient = new Thread(new Runnable() {
@Override
public void run() {
try {
if (i==0) {

clientSocket = new Socket(ipAddress,
portNumber);//127.0.0.1

}else{
oos.writeObject("Disconnected");
oos.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
});
m_objThreadClient.start();

}

public void showToast(String text){

Toast.makeText(this,text, Toast.LENGTH_SHORT).show();
}



}



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="35dp"
android:layout_marginTop="106dp"
android:text="IP Address"
android:textSize="15sp"
android:textStyle="bold" />


<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/textView"
android:layout_alignParentTop="true"
android:layout_marginStart="-4dp"
android:layout_marginTop="197dp"
android:fontFamily="sans-serif"
android:text="Port Number"
android:textSize="15sp"
android:textStyle="bold" />


<EditText
android:id="@+id/etIpAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="89dp"
android:layout_marginEnd="23dp"
android:ems="10"
android:hint="IP address"
android:inputType="text" />



<EditText
android:id="@+id/etPortNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/etIpAddress"
android:layout_alignParentTop="true"
android:layout_marginStart="0dp"
android:layout_marginTop="180dp"
android:ems="10"
android:hint="Port number"
android:inputType="text" />


<Button
android:id="@+id/btnConnectDisconnect"
android:layout_width="143dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="263dp"
android:text="Connect" />


<EditText
android:id="@+id/etMessage"
android:layout_width="232dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="22dp"
android:layout_marginBottom="11dp"
android:ems="10"
android:hint="Start Typing........"
android:inputType="text" />


<Button
android:id="@+id/btnSend"
style="@style/Widget.Support.CoordinatorLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/etMessage"
android:layout_alignParentEnd="true"
android:layout_marginTop="1dp"
android:layout_marginEnd="12dp"
android:text="Send" />


</RelativeLayout>

Here's a image of sent messages to live server

最佳答案

您正在将字符串的序列化对象数据发送到套接字输出流;除非您确实打算这样做,如下所示更改您的代码:

public class MainActivity extends AppCompatActivity {
EditText etIpAddress;
EditText etPortNumber;
Button btnConnect;

EditText etSendMessage;
Button btnSend;

String ipAddress;
int portNumber = 0;
int i =0;

Thread m_objThreadClient;
static Socket clientSocket;
static OutputStream os;


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

// Fields Initialized
etIpAddress = findViewById(R.id.etIpAddress);
etPortNumber = findViewById(R.id.etPortNumber);
btnConnect = findViewById(R.id.btnConnectDisconnect);

etSendMessage = findViewById(R.id.etMessage);
btnSend = findViewById(R.id.btnSend);

// Disabling send button.
btnSend.setEnabled(false);

// Connection and disconnection is created
try {
btnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if (i == 0) {
initialization();
connect();
} else {
disconnect();
}

}
});
}catch (Exception e){e.printStackTrace();}

//Sending messages
try {
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
String message = etSendMessage.getText().toString();
os = clientSocket.getOutputStream();
os.write(message.getBytes());
//showToast(message);
} catch (IOException e) {
e.printStackTrace();
}

}
});
}catch (Exception e){e.printStackTrace();}

}


// Retrieving ipAddress and portNumber
public void initialization(){

try {
ipAddress = etIpAddress.getText().toString();
portNumber = Integer.valueOf(etPortNumber.getText().toString());
// showToast(ipAddress+""+portNumber);

}catch(Exception e){e.printStackTrace();}
}



// Creating Socket connection
public void connect(){

try {
if (ipAddress == "" || portNumber == 0) {
showToast("Please Enter IpAddress and Port Number ");
} else {

socketConnectDisconnect();
btnConnect.setText("Disconnect");
showToast("Connected");
//Toast.makeText(this, "Connected" ,
Toast.LENGTH_SHORT).show();

//Enabling send button
btnSend.setEnabled(true);
etIpAddress.setEnabled(false);
etPortNumber.setEnabled(false);
i = 1;
}
}catch (Exception e){e.printStackTrace();}
}



// Disconnecting Socket connection
private void disconnect() {
try {
socketConnectDisconnect();
btnConnect.setText("Connect");
showToast("Disconnected");
//Toast.makeText(this, "Disconnected" ,
Toast.LENGTH_SHORT).show();
//Disabling send button
btnSend.setEnabled(false);
etIpAddress.setEnabled(true);
etPortNumber.setEnabled(true);
i = 0;
}catch (Exception e){e.printStackTrace();}
}

// establishing socket connection
public void socketConnectDisconnect(){
m_objThreadClient = new Thread(new Runnable() {
@Override
public void run() {
try {
if (i==0) {

clientSocket = new Socket(ipAddress,
portNumber);//127.0.0.1

}else{
os.write("Disconnected".getBytes());
os.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
});
m_objThreadClient.start();

}

public void showToast(String text){

Toast.makeText(this,text, Toast.LENGTH_SHORT).show();
}
}

下一行字符(\r\n)很可能是由服务器打印的。检查您在服务器上调用的打印接收缓冲区的方法。

关于java - Socket 程序中的错误,发送空白消息并且每条消息之前都有一些奇怪的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52685728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com