1. 项目截图

  aaarticlea/png;base64,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RETFJNyIiIpJuBERFZNwIyIqJuFGRFRMwo2IqJiEGxFRMQk3IqJiEm5ERMUk3IiIikm4EREVk3AjIiom4UZEVEzCjYiomIQbEVExCTciomISbkRExSTciIiKSbgRERWTcCMiKibhRkRUTMKNiKiYhBsRUTEJNyKiYhJuRETFJNyIiIpJuBERFZNwIyIqJuFGRFRMwo2IqJiEGxFRMQk3IqJiEm5ERMUk3IiIikm4EREVk3AjIiom4UZEVEzCjYiomIQbEVExCTciomISbkRExSTciIiKSbgRERWTcCMiKibhRkRUTMKNiKiYhBsRUTEJNyKiYhJuRETFJNyIiIpJuBERFZNwIyIqJuFGRFRMwo2IqJiEGxFRMQk3IqJiEm5ERMUk3IiIikm4EREVk3AjIiom4UZEVEzCjYiomIQbEVExCTciomLOKNxfuu6hK3a/zH+rEBEX2NmE2z10O587onvozn2rEBEX2FmGW9M0wo2I+L0l3IiIikm4EREVk3AjIiom4UZEVEzCjYiomIQbEVExCTciomISbkRExSTciIiKSbgRERWTcCMiKibhRkRUTMKNiKiYk4XbPXStHav+vF5/Xrd3bVl629lz7F3b2XMINyJiBk4Q7ta71srPK1qM/I18+2O7cLugaVrjZYNwIyJm4LjhXvllJZfLaZq29Kslc9OsPa2V75dzP+ZWflm59tM1wo2ImJnjhnv518uapuVyOeeDE92587ljrBny/YQbETEbxwv3qi431p7WEvdvf2wTbkTELB0r3Nd+c01ubO+3E/d3D1zCjYiYpWOFO/djTtO03I+59P0JNyJixo4X7lxO5pCk70+4EREzdoJwG+tG+v6EGxExYycYKln5eSV9f8KNiJix4x2c/OmapmnaD1rncydxf8KNiJixY4V75Zf+CZO1Z8npgNaORbgREbN0shNwln+9bO1Y0Z3tXVtGUQg3ImJmjr1WyerpbO6Vn1eMdUPWLcnfzBNuRMQsnWCRqfbHdvFuUfuh/w1Lv1oq3y+39zlzEhExUydej7vzudN633I+OO6B242d8t7cbhJuRMQMvOiFFKw3/YOTrXctwo2ImIEThFt2seO6h66MceurOlfAQUTMxgnCvfLzSuF2ofGyYb+1W+9ajVeN6Mhk83WTcCMiZuMEs0qimX9xlpeXG68aXHMSETEzJxkqOXStN1bl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" alt="" />

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 );
}
} );
} }

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="发送" /> <EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="10dp"
android:background="@drawable/et_shape" /> <TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="10dp"
android:background="@drawable/tv_shape" /> </LinearLayout>

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

温馨提示  :

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

  

android中利用Socket实现手机客户端与PC端进行通信的更多相关文章

  1. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...

  2. Android中基于Socket的网络通信

    1. Socket介绍 2. ServerSocket的建立与使用 3. 使用ServerSocket建立聊天服务器-1 4. 使用ServerSocket建立聊天服务器-2 5. 在Android中 ...

  3. Android中利用Handler实现消息的分发机制(三)

    在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去 ...

  4. Android中利用ant进行多渠道循环批量打包

    公司负责Android开发的小伙伴学习能力稍微偏弱,交代给他的自动化打包的任务,弄了好久依然没有成效.无奈只好亲自出手. 没有想到过程很顺利,我完全按照如下文章的步骤进行: 主要参考: Android ...

  5. 用PHP的socket实现客户端到服务端的通信

    服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...

  6. Windows中利用共享内存来实现不同进程间的通信

    Windows中利用共享内存来实现不同进程间的通信 一.msdn详细介绍 https://docs.microsoft.com/zh-cn/windows/win32/memory/sharing-f ...

  7. 手机控制台调试(需PC端协助)

    工具需求: 1.PC 2.手机(暂时只测试安卓,ios可能是在证书上有区别?) 3.以上两个工具在同一局域网下 步骤:  一 ,PC端登录nodejs官网,选择并下载安装 next,下一步下一步即可( ...

  8. EBS中利用Socket与外系统通信

    某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...

  9. 34、Android中基于Socket的网络通信(一)

    Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...

随机推荐

  1. java compiler level does not match the version of the installed java project

    修改:工程/.settings/”目录下找到名为 org.eclipse.wst.common.project.facet.core.xml

  2. mac下php开发环境搭建+CI框架使用

    一.启动apache: apachectl start 停止: apachectl stop 配置文件: vi /etc/apache2/httpd.conf 一.修改端口 因为80端口不想被占用,8 ...

  3. Storyboards

    这里是吐槽时间,换掉了mac默认的输入法,出发点只有一个,就是切换中英文输入的时候相当不爽.也许是习惯了其他各大输入法的一键切换,而又没有找到自带输入法可设置的地方. Segue 以前我们使用navi ...

  4. 解决phpcms V9 推荐位无法排序

    /phpcms/modules/content/content.php 454行 /** * 排序 */public function listorder() { if(isset($_GET['do ...

  5. Linux gnome

    一.主题风格网站:gnome-look.org.deviantart.com.Linux公社 我使用的主题是:http://gnome-look.org/content/show.php/OS+X+1 ...

  6. ApexSQL Log-SQL误操作恢复工具

    今天不小心对数据库执行了一次误操作,心想有没有什么工具能恢复这次误操作呢?于是找到了Log Explorer 4.2,可惜它最多只支持SQL 2005,在SQL 2008上无法使用,然后又找到了Ape ...

  7. javase基础笔记1——简介和发展

    软件分为 系统软件 windows linux类 (unix)mac(麦金塔).数据库管理系统 unix linux 开源os(open source) 免费 开放 free os operation ...

  8. view和activity的区别

    activity相当于控制部分,view相当于显示部分.两者之间是多对多的关系,所有东西必须用view来显示.  viewGroup继承自view,实现了ViewManager,ViewParent接 ...

  9. LoadRunner 脚本学习 -- 读取文件内容

    随便创建个txt文档  输入点内容,例如 读取文件内前N个字符: Action() { long myfile; ; ]; char *filename = "E:\\kkk.txt&quo ...

  10. eclipse文本域内只能输入繁体中文

    背景:在文本编辑器下写纯文本时不知怎么回事儿,原来能输入简体字,但过了之后只能输入繁体中文了!我用的是sogou拼音输入法,我检查过,输入法设置的是简体中文,eclipse默认的编码方式是utf-8. ...