Android-TCP编程
以下是PC端代码:
package com.example.sxb.myapplication;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by Administrator on 2017/12/13.
*/
public class pcChat {
public static void main(String[] args)
{ //收
new Thread(){
@Override
public void run() {
try {
while(true){
//模拟器5554发,PC收
ServerSocket ss = new ServerSocket(7777);//PC端6666端口接收消息
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+":"+str);
s.close();
ss.close();}
} catch (IOException e) {
e.printStackTrace();
} }
}.start();
//发
new Thread(){
@Override
public void run() {
try {
while(true){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println("请输入你要发送的内容:");
str = br.readLine();
System.out.println("你发送的消息:"+str);
//PC发,模拟器5554收
Socket s = new Socket("localhost",4444);//向模拟器4444端口号发送消息
OutputStream out = s.getOutputStream();
out.write(str.getBytes());
s.close();}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
} } 以下是模拟器端代码:
package com.example.sxb.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class DochatActivity extends AppCompatActivity {
TextView tv_getMessage;
EditText et_setMessage;
Button bt_send;
String str;
Socket s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dochat);
tv_getMessage=(TextView) findViewById(R.id.getMessage);
et_setMessage=(EditText) findViewById(R.id.et_setMessage);
bt_send=(Button) findViewById(R.id.bt_send);
new Thread(){
@Override
public void run() {
try {
//收
while(true){
//模拟器5554收,模拟器5556发
ServerSocket ss = new ServerSocket(4444);//模拟器4444接收消息
s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
str = new String(buf,0,num);
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_getMessage.setText(s.getInetAddress().toString()+":"+str);
}
});
s.close();
ss.close();}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
public void click(View v){
switch (v.getId()){
case R.id.bt_send: new Thread(){
@Override
public void run() {
try {
//发
//模拟器5554发,PC收
Socket s = new Socket("10.0.2.2",7777);//向PC端7777发送消息
//模拟器5554发,模拟器5556收
// Socket s=new Socket("10.0.2.2",6666);//模拟器6666 6666端口号收
OutputStream out = s.getOutputStream();
out.write(et_setMessage.getText().toString().getBytes());
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
以下是布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/getMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="即将接收消息..."
/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<EditText
android:id="@+id/et_setMessage"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:textSize="20sp"
android:hint="请输入消息"
/>
<Button
android:id="@+id/bt_send"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="发送"
android:layout_toRightOf="@+id/et_setMessage"
android:onClick="click"/>
</RelativeLayout>
</LinearLayout> 写完代码以后的操作步骤:
1.在cmd输入指令:telnet,检查telnet有没有打开;
2.控制面板》程序》程序和功能》打开或关闭Windows功能》勾选Telnet服务器和telnet客户端;
3.telnet localhost 5554(注意:打开模拟器5554之后操作这一步);
4.去 C:\Users\neusoft\.emulator_console_auth_token 下面用记事本打开复制token;
5.在cmd 输入 :auth 44kZIm47P+BkAPhI;(不同电脑可能不一样,看token里面的数据)
6.在cmd输入:redir add tcp:4444:4444;
(端口重映射 )
tcp:电脑端口号:模拟器端口号
Android-TCP编程的更多相关文章
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程基础
Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...
- Android网络编程系列 一 Socket抽象层
在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- Android网络编程要学的东西与Http协议学习
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android 网络编程 记录
简单介绍 看了深入理解Android网络编程感觉不错.今天对Android网络编程进行了要点记录. 内容 Android基于网络技术和编程实践 要点 定义 描写叙述 IP协议 用于报文交换网络的一种面 ...
随机推荐
- 树莓派 ubuntu 系统下修改config.txt文件调整分辨率记录
参考 https://www.jianshu.com/p/99eea4db21c4 注:操作前最好先备份个 config.txt 文件 防止悲剧 防止悲剧 防止悲剧 终端下 进入boot/config ...
- struts2第二天——数据操作
先介绍一下大致内容: 大致内容: 结果页面配置 action获取表单提交数据 提供获取表单数据的方式(封装数据) 表单数据封装到集合中 表达式封装和模型驱动封装比较 一.结果页面配置: result标 ...
- 20155227《网络对抗》Exp1 PC平台逆向破解(5)M
20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...
- mfc 类
知识点 类的概念 类的相关术语 定义类 使用类 一.类的概念 简单的说类就是数据与函数综合体,它是用户自定义类型. 二.类的相关术语 类的实例称为对象. 类在定义中隐式地包含数据和操作函数,这种思想称 ...
- .net core的定时任务框架Timed Job
参考文档:http://www.1234.sh/post/pomelo-extensions-timed-jobs 在该文档中介绍了怎么使用timed job,但是在使用db的时候会发生错误,错误一般 ...
- c# 抓取和解析网页,并将table数据保存到datatable中(其他格式也可以,自己去修改)
使用HtmlAgilityPack 基础请参考这篇博客:https://www.cnblogs.com/fishyues/p/10232822.html 下面是根据抓取的页面string 来解析并保存 ...
- Python之冒泡排序算法
顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行.例如 myList = [1,4,5,0,6],比较方式为: 相邻的两个数字先进行比较,也就 ...
- Python的进阶:copy与deepcopy区别
copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式. 首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以 ...
- 查找linux镜像源中的软件版本并进行安装
输入以下代码进行软件查找 sudo apt-cache search YourSoftwareName 根据所得到的结果进行安装 sudo apt-get install YourSoftwareNa ...
- Linux 安装JDK Tomcat MySQL(使用Mac远程访问)
阅读本文需要一定的Linux基础 一 环境 阿里云服务器: CentOS 7.4 64位(基于RedHat) 本机: macOS High Sierra 二 压缩包 JDK http://www.or ...