我已经完成了代码 – 简单的程序,客户端发送消息,服务器回复它 – 如下所示:
服务器代码:
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通信所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)