Socket 通信

1.UDP实现  (DatagramSocket)

【客户端】

//首先创建一个DatagramSocket对象

DatagramSocket socket = new DatagramSocket(4567);

//创建一个InetAddress

InetAddress serverAddress = InetAddress.getByName("192.168.1.104");

String str = "hello";

//这是要传输的数据 byte data [] = str.getBytes();

//把传输内容分解成字节

//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号

DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);

//调用socket对象的send方法,发送数据

socket.send(packet);

【服务器端】

//创建一个DatagramSocket对象,并指定监听的端口号

DatagramSocket socket = new DatagramSocket(4567);

byte data [] = new byte[1024];

//创建一个空的DatagramPacket对象

DatagramPacket packet = new DatagramPacket(data,data.length);

//使用receive方法接收客户端所发送的数据,

//如果客户端没有发送数据,该进程就停滞在这里

socket.receive(packet);

String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

2.TCP通信

【客户端】

创建一Socket对象并指明服务器端的IP及端口号

Socket socket = new Socket("192.168.1.0",45678);

//向服务器发送消息

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

out.println(message);

//从服务器接收消息

BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String rString = is.readLine().toString();

【服务器端】

//创建一个ServerSocket对象,并让这个Socket在45678端口监听

serverSocket = new ServerSocket(45678);

//调用ServerSocket的accept()方法,接受客户端所发送的请求,

//如果客户端没有发送数据,那么该线程就停滞不继续

Socket socket = serverSocket.accept();

//从Socket当中得到InputStream对象

InputStream inputStream = socket.getInputStream();

byte buffer [] = new byte[1024*4];

int temp = 0;

//从InputStream当中读取客户端所发送的数据

while((temp = inputStream.read(buffer)) != -1) {

String str = new String(buffer,0,temp);

//接下来可以对从客户端接收到的消息做处理

}

【Socket获取客户端IP地址及端口号】

Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一    是返回EndPoint对象的RemoteEndPoint属性。

EndPoint类本身是抽象的,要想收集有用的信息,需·要把    EndPoint强制类型转换为IPEndPoint对象。

IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:

TcpListener tcpl=new TcpListener(port);

Socket s=tcpl.AcceptSocket();

label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();

label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();

android Socket 编程的更多相关文章

  1. Android Socket编程

    花了大概两天的时间,终于把Android的Socket编程给整明白了.抽空和大家分享一下: Socket Programming on Android Socket 编程基础知识: 主要分服务器端编程 ...

  2. Android Socket编程学习笔记

    http://blog.csdn.net/eyu8874521/article/details/8847173 度娘给出的描述:通常也称作"套接字",用于描述IP地址和端口,是一个 ...

  3. Android Socket编程基础

    前些天写了一个Android手机在局域网内利用Wifi进行文件传输的Demo,其中用到了Socket编程,故此总结(盗了网友的一些图和文字).好久好久没来博客园了~~ 1.什么是Socket? soc ...

  4. android socket编程用Bufferreader读取的一个失败教训

    由于我的手机需要用笔记本开的wifi,躺在床上玩手机时需要关电脑或者是要让电脑放歌的时候总是不想下床,于是我想能不能用一个APP,然后通过局域网实现在手机上对电脑进行操控呢?说干就干. 我在电脑上用的 ...

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

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

  6. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  7. android开发系列之socket编程

    上周在项目遇到一个接口需求就是通讯系列必须是socket,所以在这篇博客里面我想谈谈自己在socket编程的时候遇到的一些问题. 其实在android里面实现一个socket通讯是非常简单的,我们只需 ...

  8. Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html 一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把 ...

  9. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

随机推荐

  1. JavaScript callback function 回调函数的理解

    来源于:http://mao.li/javascript/javascript-callback-function/ 看到segmentfault上的这个问题 JavaScript 回调函数怎么理解, ...

  2. SQLserver视图修改sql

    语法: alter view dbo.视图名 as 更新后的视图SQL go 举个栗子: 原视图名为YOUR_VIEW其中SQL为:  select * form TableA 更新视图: alter ...

  3. Java实现List数组的几种替代方案

    在Java中,禁止定义List<Integer>a[],这种List数组结构. 但是还是可以使用其它一些方式来实现列表数组. 一.使用Node把List包裹起来 public class ...

  4. [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction

    1.Spring中的数据库支持 把具有相同功能的代码模板抽取到一个工具类中.2.关于jdbc template的应用 jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中, ...

  5. 微信小程序-从零开始制作一个跑步微信小程序

    来源:伯乐在线 - 王小树 链接:http://ios.jobbole.com/90603/ 点击 → 申请加入伯乐在线专栏作者 一.准备工作 1.注册一个小程序账号,得用一个没注册过公众号的邮箱注册 ...

  6. suricata 的安装编译

    最近打算研究suricata源码,下载并安装了稳定版3.2.3版本,操作系统是Ubuntu 16.04.2 LTS,下来描述我的操作过程: 1,安装suricata运行可能用到的库: sudo apt ...

  7. ng-file-upload结合springMVC使用

    引入angular和ng-file-upload. 前端代码 Upload.upload({ url: 'upload', fields: {'username': 'zouroto'}, // ad ...

  8. resume.c

    resume.c //采用CURLOPT_RESUME_FROM_LARGE 实现文件断点续传功能 #include <stdlib.h> #include <stdio.h> ...

  9. C# WinForm给Button或其它控件添加快捷键响应

    今天做东西遇到要给按钮添加快捷键.就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...

  10. Mysql:MyIsam和InnoDB的区别

    MyISAM: 这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法 ...