Android客户端和Java服务器TCP通信

Android客户端和Java服务器TCP通信,第1张

概述我正在开发一个 Android应用程序(客户端),并希望它使用TCP通信与我的Java服务器连接. 我已经完成了代码 – 简单的程序,客户端发送消息,服务器回复它 – 如下所示: 服务器代码: import java.net.*;public class Server { public static void main(String[] args) { int n 我正在开发一个 Android应用程序(客户端),并希望它使用TCP通信与我的Java服务器连接.

我已经完成了代码 – 简单的程序,客户端发送消息,服务器回复它 – 如下所示:

服务器代码:

import java.net.*;public class Server {    public static voID main(String[] args) {        int nreq = 1;        try        {            ServerSocket sock = new ServerSocket (8080);            for (;;)            {                Socket newsock = sock.accept();                System.out.println("Creating thread ...");                Thread t = new ThreadHandler(newsock,nreq);                t.start();            }        }        catch (Exception e)        {            System.out.println("IO error " + e);        }        System.out.println("End!");    }}

服务器的同一项目文件中的线程处理程序代码:

import java.io.*;import java.net.*;class ThreadHandler extends Thread {    Socket newsock;    int n;    ThreadHandler(Socket s,int v) {        newsock = s;        n = v;    }    public voID run() {        try {            PrintWriter outp = new PrintWriter(newsock.getoutputStream(),true);            BufferedReader inp = new BufferedReader(new inputStreamReader(                    newsock.getinputStream()));            outp.println("Hello :: enter QUIT to exit \n");            boolean more_data = true;            String line;            while (more_data) {                line = inp.readline();                System.out.println("Message '" + line + "' echoed back to clIEnt.");                if (line == null) {                    System.out.println("line = null");                    more_data = false;                } else {                    outp.println("From server: " + line + ". \n");                    if (line.trim().equals("QUIT"))                        more_data = false;                }            }            newsock.close();            System.out.println("disconnected from clIEnt number: " + n);        } catch (Exception e) {            System.out.println("IO error " + e);        }    }}

这是客户端(AndroID):

package com.androID.clIEnt;import java.io.BufferedReader;import java.io.IOException;import java.io.inputStreamReader;import java.io.PrintWriter;import java.net.socket;import java.util.Scanner;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.EditText;import androID.Widget.TextVIEw;public class ClIEnt extends Activity {    /** Called when the activity is first created. */    Scanner scanner = new Scanner(system.in);    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.main);        final EditText msg = (EditText) findVIEwByID(R.ID.etMsg);        button send = (button) findVIEwByID(R.ID.bSend);        final TextVIEw convo = (TextVIEw) findVIEwByID(R.ID.tvConvo);        final TextVIEw status = (TextVIEw) findVIEwByID(R.ID.tvstatus);        try {            send.setonClickListener(new VIEw.OnClickListener() {                Socket s = new Socket("localhost",8080);                String message = msg.getText().toString();                @OverrIDe                public voID onClick(VIEw v) {                    status.setText("...");                    PrintWriter outp = null;                    BufferedReader inp = null;                    status.setText("Established connection..");                    String serverMsg = null;                    try {                        outp = new PrintWriter(s.getoutputStream(),true);                        inp = new BufferedReader(new inputStreamReader(s.getinputStream()));                        serverMsg = inp.readline();                    } catch (IOException e) {                        e.printstacktrace();                    }                    convo.append(serverMsg + "\n");                    if (message != null) {                        if (msg.getText().toString().trim() == "QUIT") {                            try {                                s.close();                            } catch (IOException e) {                                e.printstacktrace();                            }                            status.setText("disconnected from server.");                        } else {                                try {                                    convo.append(message + "\n");                                    outp.println(message);                                     serverMsg = inp.readline();                                    convo.append(serverMsg + "\n");                                } catch (IOException e) {                                    e.printstacktrace();                                }                        }                    }                    else                        status.setText("Problem in connection..!");                }            });        } catch (IOException e) {            e.printstacktrace();        }    }}

这是XML文件:

<?xml version="1.0" enCoding="utf-8" ?> - <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical">  <TextVIEw androID:ID="@+ID/tvText" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Your message here:" /> - <EditText androID:ID="@+ID/etMsg" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ems="10">  <requestFocus />   </EditText>  <TextVIEw androID:ID="@+ID/tvstatus" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Status..." androID:textAppearance="?androID:attr/textAppearanceSmall" />   <button androID:ID="@+ID/bSend" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Send" />   <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="Conversation:" androID:textAppearance="?androID:attr/textAppearanceLarge" />   <TextVIEw androID:ID="@+ID/tvConvo" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:text="" />   </linearLayout>

我试过运行它,但没有任何反应.当我单击按钮时,TextVIEw不会从服务器查看“Hello”消息.

解决方法 您将AndroID客户端连接到localhost.
Socket s = new Socket("localhost",8080);

这仅在您的服务器在AndroID设备上运行时才有效.但我认为它在你的电脑上运行.因此,当您在AndroID模拟器上运行应用程序时,您可以连接到10.0.2.2以联系主机.在真实设备上,您必须找到AndroID设备可以访问的服务器IP地址,例如:通过Wi-Fi.

总结

以上是内存溢出为你收集整理的Android客户端和Java服务器TCP通信全部内容,希望文章能够帮你解决Android客户端和Java服务器TCP通信所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1130649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存