以下是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编程的更多相关文章

  1. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  2. Android网络编程基础

    Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...

  3. Android网络编程系列 一 Socket抽象层

     在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...

  4. Android网络编程概述

    Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...

  5. Android网络编程要学的东西与Http协议学习

    本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...

  6. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  7. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  8. Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  9. Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  10. Android 网络编程 记录

    简单介绍 看了深入理解Android网络编程感觉不错.今天对Android网络编程进行了要点记录. 内容 Android基于网络技术和编程实践 要点 定义 描写叙述 IP协议 用于报文交换网络的一种面 ...

随机推荐

  1. 版本管理工具git与svn简介

    版本管理工具 版本管理工具简介 常见版本管理工具 cvs(Concurrent Versions System) vss(Visual SourceSafe) svn 常用的版本管理工具 git 流行 ...

  2. HTTP协议图

  3. ACM1001:Sum Problem

    Problem Description In this problem, your task is to calculate SUM(n) = 1 + 2 + 3 + ... + n.   Input ...

  4. C语言学习记录_2019.02.10

    sizeof:给出某个类型或某个变量在内存中占据的字节数:(1个字节8位,即8比特) 格式符 (1)%ld表示数据按十进制有符号长型整数输入或输出. (2)%d表示数据按十进制有符号整型数输入或输出. ...

  5. 20155236范晨歌_MSF基础应用

    20155236范晨歌_MSF基础应用 20155236范晨歌_MSF基础应用 目录 概述 MS08-067漏洞攻击 MS11-050漏洞攻击 MS10-087漏洞攻击 辅助模块 概述 MSF的六种模 ...

  6. [arc072F]Dam-[单调队列]

    Description 传送门 Solution 首先我们肯定不能那么耿直地直接把水混合起来吧..不然分分钟完球. 那么怎么找到最优解呢?假如我们把水的体积和温度按顺序插入队列,这时我们插入第i天的水 ...

  7. 使用Random随机生成[min,max]之间的整数:

    如下代码是生成范围在min到max之间的随机整数(包括min和max):   import java.util.Random; /** * 生成[min,max]的随机整数 * @author mei ...

  8. 23-[jQuery]-效果:隐藏,淡出,盒子高度,动画

    1.隐藏,显示 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. [BZOJ4883][Lydsy1705月赛]棋盘上的守卫[最小基环树森林]

    题意 有一大小为 \(n*m\) 的棋盘,要在一些位置放置一些守卫,每个守卫只能保护当前行列之一,同时在每个格子放置守卫有一个代价 \(w\) ,问要使得所有格子都能够被保护,需要最少多少的代价. \ ...

  10. 【JUC源码解析】ForkJoinPool

    简介 ForkJoin 框架,另一种风格的线程池(相比于ThreadPoolExecutor),采用分治算法,工作密取策略,极大地提高了并行性.对于那种大任务分割小任务的场景(分治)尤其有用. 框架图 ...