博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中利用Socket实现手机客户端与PC端进行通信
阅读量:4693 次
发布时间:2019-06-09

本文共 5496 字,大约阅读时间需要 18 分钟。

1. 项目截图

  

 

2. 服务端源码

  

package test;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class MyServer {	// 服务器连接	public static ServerSocket cServerSocket;	// 连接	public static Socket cSocket;	// 端口	public static final int PORT = 8888;	/**	 * 主方法	 * 	 * @time 注释时间:2013-12-23 下午4:10:47	 * @param args	 */	public static void main ( String [ ] args ) {		DataInputStream dis = null;		DataOutputStream dos = null;			try {			cServerSocket = new ServerSocket (			                              PORT );			while ( true ) {				System.out.println ( "正在等待客户连接..." );				// 这里处于等待状态,如果没有客户端连接,程序不会向下执行				cSocket = cServerSocket.accept ( );				dis = new DataInputStream (				                              cSocket.getInputStream ( ) );				dos = new DataOutputStream (				                              cSocket.getOutputStream ( ) );				// 读取数据				String clientStr = dis.readUTF ( );				// 写出数据				dos.writeUTF ( "已收到信息:"				                              + clientStr );				System.out.println ( "---客户端已成功连接---" );				// 得到客户端的IP				System.out.println ( "客户端的IP="				                              + cSocket.getInetAddress ( ) );				// 得到客户端的端口号				System.out.println ( "客户端的端口号="				                              + cSocket.getPort ( ) );				// 得到本地端口号				System.out.println ( "本地服务器端口号="				                              + cSocket.getLocalPort ( ) );				System.out.println ( "客户端:"				                              + clientStr );				System.out.println ( "---------------------------------" );			}		}		catch ( IOException e ) {			e.printStackTrace ( );		}		finally {			try {				if (dis != null) {					dis.close ( );				}				if (dos != null) {					dos.close ( );				}			}			catch ( IOException e ) {				e.printStackTrace ( );			}		}	}}

 客户端源码

package com.example.cf_mysocketclient;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {	// 发送按钮	private Button cButtonSend;	// 发送的内容	private EditText cEditTextContent;	// 接收的内容	private TextView cTextViewContent;	// Socket用于连接服务器获取输入输出流	private Socket cSocket;	// 服务器server/IP地址(当前PC的IP地址)	private final String ADDRESS = "10.0.2.2";	// 服务器端口	private final int PORT = 8888;	// 消息处理的线程	private Thread cThread;	// 消息的内容	private String cContent;	// 处理消息机制	Handler cHandler = new Handler ( ) {		@ Override		public void handleMessage ( Message msg ) {			switch ( msg.what ) {				case 0x01 :					cThread = new Thread ( ) {						@ Override						public void run ( ) {							super.run ( );							DataInputStream dis = null;							DataOutputStream dos = null;							try {								// 阻塞函数,正常连接后才会向下继续执行								cSocket = new Socket (								                              ADDRESS ,								                              PORT );								dis = new DataInputStream (								                              cSocket.getInputStream ( ) );								dos = new DataOutputStream (								                              cSocket.getOutputStream ( ) );								// 向服务器写数据								dos.writeUTF ( cEditTextContent								                              .getText ( )								                              .toString ( ) );								cContent = "I Say:";								cContent += cEditTextContent.getText ( )								                              .toString ( );								cContent += "\n";								cContent += "Server Say:";								// 读取服务器发来的数据								cContent += dis.readUTF ( );							}							catch ( UnknownHostException e ) {								e.printStackTrace ( );							}							catch ( IOException e ) {								e.printStackTrace ( );							}							finally {								try {									if (dis != null) {										dis.close ( );									}									if (dos != null) {										dos.close ( );									}								}								catch ( IOException e ) {									e.printStackTrace ( );								}								cHandler.sendEmptyMessage ( 0x02 );							}						}					};					cThread.start ( );					break;				case 0x02 :					cTextViewContent.setText ( cContent );					break;				default :					break;			}		}	};	@ Override	protected void onCreate ( Bundle savedInstanceState ) {		super.onCreate ( savedInstanceState );		this.getWindow ( )		                              .setFlags ( WindowManager.LayoutParams.FLAG_FULLSCREEN ,		                                                            WindowManager.LayoutParams.FLAG_FULLSCREEN );		this.requestWindowFeature ( Window.FEATURE_NO_TITLE );		setContentView ( R.layout.activity_main );		init ( );	}	/**	 * 初始化	 * 	 */	private void init ( ) {		cButtonSend = ( Button ) findViewById ( R.id.btn );		cEditTextContent = ( EditText ) findViewById ( R.id.et );		cTextViewContent = ( TextView ) findViewById ( R.id.tv );		cButtonSend.setOnClickListener ( new OnClickListener ( ) {			@ Override			public void onClick ( View v ) {				cHandler.sendEmptyMessage ( 0x01 );			}		} );	}}

 布局文件

当用户在编辑框中输入内容,便可以在TextView中显示出来

温馨提示  :

   运行项目之前,一定要把服务端先启动 ,在运行客户端

 

 

  

转载于:https://www.cnblogs.com/SM-t/p/4312469.html

你可能感兴趣的文章
Java代码检查工具
查看>>
深入了解VC++编译器【转】
查看>>
响应式图片
查看>>
如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
查看>>
iOS音频播放(一):概述
查看>>
Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
查看>>
android对象巧用Android网络通信技术,在网络上直接传输对象
查看>>
android下载手动下载Android SDK
查看>>
oracle12c(oracle12.1.0.1.0)安装指南--实测OEL5.9(RH5)
查看>>
北京邮电大学 程序设计课程设计 电梯 文件输入版本(已调试,大致正确运行==)...
查看>>
HashMap的两种排序方式
查看>>
Spring的第一个例子
查看>>
从Firefox升级说学习方法
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
【杂文】记一些有用的神奇网站
查看>>
什么是“闭包”(closure)为什么要用它?
查看>>
log4j2简单使用
查看>>
wget使用小技巧
查看>>
学霸修炼的秘籍
查看>>
Duplicate 复制数据库 搭建Dataguard
查看>>