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协议 用于报文交换网络的一种面 ...
随机推荐
- Docker vs Warden
相同点: 都是依赖宿主操作系统内核的轻量级容器: 都采用了linux内核技术实现容器隔离(namespace)和资源限制(cgroup): 都使用了aufs文件系统: 不同点: 用途 warden是C ...
- # 课堂测试(CH6)20155218
课堂测试(CH6) 1. 下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为(D) A . 1 B . 1/4 C . 1/2 D . 3/4 解析:在x[0],y[0]时发 ...
- 20155237 2016-2017-2 《Java程序设计》第9周学习总结
20155237 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 驱动的四种类型 JDBC-ODBC Bridge Dri ...
- 洛谷 P2563 [AHOI2001]质数和分解
洛谷 P2563 [AHOI2001]质数和分解 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能 ...
- 【转载】COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
原文:http://vckbase.com/index.php/wv/1236.html 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和鼓励,在此一并表示感谢.咳 ...
- 1-[Mysql]-数据库介绍及安装
1.数据库概述 1.数据库服务器: 运行数据库管理软件的计算机 2.数据库管理软件:mysql oracle db2 sqlserver 3.库:文件夹 4.表:文件 5.记录:事物的一系列典型特征: ...
- Performance Monitor2:性能计数器
性能计数器(Performance Counter)是量化系统状态或活动的一个数值,Windows Performance Monitor在一定时间间隔内(默认的取样间隔是15s)获取Performa ...
- Git积累
1.使用git config命令进行配置(此配置为全局配置,这些是在提交commit时的签名): $ git config --global user.name "填写github的用户名& ...
- python爬虫之解析库正则表达式
上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性 @href @class span 抑或是p节点里 ...
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...