Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户端未从服务器接收字符串_Java_Android_Sockets - Fatal编程技术网

Java 客户端未从服务器接收字符串

Java 客户端未从服务器接收字符串,java,android,sockets,Java,Android,Sockets,我试图用java编写一个使用套接字的TCP客户机,但是我似乎无法读取从服务器发送到客户机的数据。有一段时间我会收到来自服务器的消息,但不是所有时间 公共类TCPClient{ 私有字符串消息; 公共静态最终字符串SERVERIP=“103.13.97.87”;//您的计算机IP地址 公共静态最终int服务器端口=8101; private OnMessageReceived mMessageListener=null; 私有布尔值mRun=false; 打印输出; 缓冲读取器; /** *OnM

我试图用java编写一个使用套接字的TCP客户机,但是我似乎无法读取从服务器发送到客户机的数据。有一段时间我会收到来自服务器的消息,但不是所有时间

公共类TCPClient{
私有字符串消息;
公共静态最终字符串SERVERIP=“103.13.97.87”;//您的计算机IP地址
公共静态最终int服务器端口=8101;
private OnMessageReceived mMessageListener=null;
私有布尔值mRun=false;
打印输出;
缓冲读取器;
/**
*OnMessagedReceived类的构造函数侦听从服务器接收的消息
*/
公共TCP客户端(OnMessageReceived侦听器){
mMessageListener=侦听器;
}
/**
*将客户端输入的消息发送到服务器
*@param客户端输入的消息文本
*/
公共无效发送消息(字符串消息){
if(out!=null&&!out.checkError()){
out.println(消息);
out.flush();
}
}
公共void stopClient(){
mRun=假;
}
公开募捐{
mRun=真;
试一试{
//您必须在此处输入计算机的IP地址。
InetAddress serverAddr=InetAddress.getByName(SERVERIP);
Log.e(“TCP客户端”,“C:连接…”);
//创建套接字以与服务器建立连接
Socket Socket=新套接字(serverAddr,SERVERPORT);
试一试{
//将消息发送到服务器
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()),true);
e(“TCP客户端”,“C:已发送”);
Log.e(“TCP客户端”,“C:完成”);
//接收服务器发回的消息
in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
//在这种情况下,客户端将侦听服务器发送的消息
while(mRun){
serverMessage=in.readLine();
if(serverMessage!=null&&mMessageListener!=null){
//调用从MyActivity类接收的messageReceived方法
mMessageListener.messageReceived(serverMessage);
}
serverMessage=null;
}
Log.e(“来自服务器的响应”,“S:接收到的消息:“+serverMessage+””);
}捕获(例外e){
Log.e(“TCP”,“S:错误”,e);
}最后{
//插座必须关闭。无法重新连接到此插座
//关闭后,这意味着必须创建一个新的套接字实例。
socket.close();
}
}捕获(例外e){
Log.e(“TCP”,“C:错误”,e);
}
}
//声明接口。方法messageReceived(String message)必须在MyActivity中实现
//在asynckTask doInBackground上初始化
已接收消息的公共接口{
接收到公共无效消息(字符串消息);
}
}
My CustomAdpter.java

公共类MyCustomAdapter扩展了BaseAdapter{
私人阵列列表;
私人停车场平面布置;
公共MyCustomAdapter(上下文上下文,ArrayList ArrayList){
mListItems=阵列列表;
//找到布局充气机
mLayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
//getCount()表示列表中有多少项
返回mListItems.size();
}
@凌驾
//从特定位置获取项目的数据
//i表示项目在列表中的位置
公共对象getItem(int i){
返回null;
}
@凌驾
//从列表中获取项目的位置id
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组视图组){
//检查重用的视图是否为null,如果不为null,则重用它
如果(视图==null){
视图=MLAyoutFlater.充气(R.layout.list\u项,空);
}
//从数组列表中的位置“position”获取字符串项,将其放在TextView中
String stringItem=mListItems.get(位置);
如果(stringItem!=null){
TextView itemName=(TextView)view.findViewById(R.id.list\u item\u text\u view);
if(itemName!=null){
//在TextView上设置项目名称
itemName.setText(stringItem);
}
}
//此方法必须返回与指定位置的数据对应的视图。
返回视图;
}
}
MainActivity.java

public class MainActivity extends Activity
{
private ListView mList;
private ArrayList<String> arrayList;
private MyCustomAdapter mAdapter;
private TCPClient mTcpClient;

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

    arrayList = new ArrayList<String>();

    final EditText editText = (EditText) findViewById(R.id.editText);
    Button send = (Button)findViewById(R.id.send_button);

    //relate the listView from java to the one created in xml
    mList = (ListView)findViewById(R.id.list);
    mAdapter = new MyCustomAdapter(this, arrayList);
    mList.setAdapter(mAdapter);

    // connect to the server
    new connectTask().execute("");

    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //String message = editText.getText().toString();
            String message = "mall: ABC Mall date: 08/08/2013 time: 13:45 md5 f6151b2cdc256be4971bcc30629bbc7\r\n";
           /* String str =md5Digest(message);
            String s=message+str;*/

            //add the text in the arrayList
            arrayList.add("c: " + message);

            //sends the message to the server
            if (mTcpClient != null) {


                mTcpClient.sendMessage(message);

                /*mTcpClient.sendMessage(s);*/
            }

            //refresh the list
            mAdapter.notifyDataSetChanged();
            editText.setText("");
        }
    });

}


public class connectTask extends AsyncTask<String,String,TCPClient> {

    @Override
    protected TCPClient doInBackground(String... message) {

        //we create a TCPClient object and
        mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
            @Override
            //here the messageReceived method is implemented
            public void messageReceived(String message) {
                //this method calls the onProgressUpdate
                publishProgress(message);
            }
        });
        mTcpClient.run();

        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);

        //in the arrayList we add the messaged received from server
        arrayList.add(values[0]);
        // notify the adapter that the data set has changed. This means that new message received
        // from server was added to the list
        mAdapter.notifyDataSetChanged();
    }
}
public static final String md5Digest(final String text)
{
     try
     {
           // Create MD5 Hash
           MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
           digest.update(text.getBytes());
           byte messageDigest[] = digest.digest();

           // Create Hex String
           StringBuffer hexString = new StringBuffer();
           int messageDigestLenght = messageDigest.length;
           for (int i = 0; i < messageDigestLenght; i++)
           {
                String hashedData = Integer.toHexString(0xFF & messageDigest[i]);
                while (hashedData.length() < 2)
                     hashedData = "0" + hashedData;
                hexString.append(hashedData);
           }
           return hexString.toString();

     } catch (NoSuchAlgorithmException e)
     {
           e.printStackTrace();
     }
     return ""; // if text is null then return nothing
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}
公共类MainActivity扩展活动
{
私有ListView-mList;
私有ArrayList ArrayList;
私人MyCustomAdapter mAdapter;
私有TCP客户端mTcpClient;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList=新的arrayList();
final EditText EditText=(EditText)findViewById(R.id.EditText);
按钮发送=(按钮)findViewById(R.id.send_按钮);
//将java中的listView与xml中创建的listView关联起来
mList=(ListView)findViewById(R.id.list);
mAdapter=新的MyCustomAdapter(此为arrayList);
mList.setAdapter(mAdapter);
//连接到服务器
新建connectTask()。执行(“”);
send.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//String message=editText.getText().toString();
字符串消息=“购物中心:ABC购物中心日期:2013年8月8日时间:13:45 md5 F6151B2CDC256BE4971BC30629BBC7\r\n”;
/*字符串str=md5Digest