Android中的Socket编程基础

Socket 编程基础知识:

主要分服务器端编程和客户端编程。

服务器端编程步骤:

1: 创建服务器端套接字并绑定到一个端口上(0-1023是系统预留的,最好大约1024)

2 : 套接字设置监听模式等待连接请求

3: 接受连接请求后进行通信

4: 返回,等待赢 一个连接请求

客户端编程步骤:

1: 创建客户端套接字(指定服务器端IP地址与端口号 )

2: 连接(Android 创建Socket时会自动连接)

3: 与服务器端进行通信

4: 关闭套接字

Android Socket 通信原理注意:

1: 中间的管道连接是通过 InputStream/OutputStream流实现的。

2: 一旦管道建立起来可进行通信

3: 关闭管道 的同时意味着关闭Socket

4: 当对同一个Socket创建重复管道时会异常

5: 通信过程中 顺序很重要:服务器端首先得到输入流,然后将输入流信息输出到其各个客户端

客户端先建立连 接后先写入输出流,然后再获得输入流。不然活有EOFException的异常。

不要忘记添加Internet权限 ,不要忘记添加Internet权限,不要忘记添加Internet权限

服务器端代码的编写:

import 

java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;  

public class Server {
static ServerSocket aServerSocket = null; // Server Socet.
DataInputStream aDataInput = null; // Server input Stream that to
// receive msg from client.
DataOutputStream aDataOutput = null; // Server output Stream that to
static ArrayList list = new ArrayList();  

public static void main(String[] args) {
try {
aServerSocket = new ServerSocket(50003); // listen 8888 port.
System.out.println("already listen 50003 port.");
} catch (Exception e) {
e.printStackTrace();
}
int num = 0;
while (num < 10) {
Socket aSessionSoket = null;
try {
aSessionSoket = aServerSocket.accept();
MyThread thread = new Server().new MyThread(aSessionSoket);
thread.start();
num = list.size();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}  

class MyThread extends Thread {
Socket aSessionSoket = null;
public MyThread(Socket socket) {
aSessionSoket = socket;
}  

public void run() {
try {
aDataInput = new DataInputStream(aSessionSoket.getInputStream());
aDataOutput = new DataOutputStream(aSessionSoket.getOutputStream());
list.add(aDataOutput);  

while (true) {
String msg = aDataInput.readUTF(); // read msg.
if (!msg.equals("connect...")) {
System.out.println("ip: "+ aSessionSoket.getInetAddress());// ip.System.out.println("receive 

msg: " + msg);
for (int i = 0; i < list.size(); i++) {
DataOutputStream output = (DataOutputStream) list.get(i);
output.writeUTF(msg + "----" + list.size());
}
if (msg.equals("end"))
break;
}
aDataOutput.writeUTF("");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
aDataInput.close();
if (aDataOutput != null)
aDataOutput.close();
list.remove(aDataOutput);
aSessionSoket.close();
} catch (Exception e2) {

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索编程
, 服务器
, socket
, 套接字
, android 服务端
, android socket
, import
, android 4高级编程
, i socket io
, android socket服务端
, java socket list命令
, java异常android
, socket通信android
DataOutputStream
android socket编程、android中socket编程、android的socket编程、socket编程基础、socket原理与编程基础,以便于您获取更多的相关知识。

时间: 2024-09-08 11:39:43

Android中的Socket编程基础的相关文章

《Android智能穿戴设备开发指南》——第6章,第6.1节Socket编程基础

6.1 Socket编程基础 Android智能穿戴设备开发指南 网络编程中有两个主要问题,一个是如何准确地定位网络中的一台或多台主机,另一个就是找到主机后如何可靠.高效地进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,并通过IP地址可以唯一地确定Internet上的一台主机.TCP层提供面向应用的可靠(TCP)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的.目前较为流行的网络编程模型是客户机/服务器(C/S)结构

Ruby中的Socket编程简单入门

  这篇文章主要介绍了Ruby中的Socket编程简单入门,是Ruby网络编程学习中的基础知识,需要的朋友可以参考下 Ruby提供了两个访问级别的网络服务.在一个较低的水平,可以访问底层的操作系统,它可以实现面向连接和无连接协议的客户端和服务器支持基本的socket. Ruby也具有程序库,提供更高级别的访问特定的应用程序级的网络协议,如FTP,HTTP等. 这篇教程介绍 Ruby Socket编程概念及讲解一个简单的实例. 什么是Sockets? 套接字是一个双向通信信道的端点.socket能

java-Java socket编程基础概念问题

问题描述 Java socket编程基础概念问题 本地地址,本地链接地址代表什么意思啊,具体有什么作用,请大神给出解答 解决方案 本地地址,本地链接地址对应应该是 远程地址和远程链接地址简单一些理解就类似于目录,用于访问资源 解决方案二: Socket 编程基础概念java socket编程(基础)java Socket编程基础

线程-android中UDP socket通信的问题

问题描述 android中UDP socket通信的问题 我使用两个线程,一个用来发送 数据,一个用来接收数据,先开启接收数据线程,接收到数据之后然后回应给对方,但是发送一直停在SocketAddess s=pacakge.getSocketAddess这一步,pacakge是接收到的包.接收线程是这样的:while(true){ socket.receive(packge);}接收到包之后我开启发送线程就卡在上面 那步了,是不是 socket在处于阻塞状态时不能发送数据包啊? 解决方案 默认是

读懂Java中的Socket编程(转)

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序.  餐前甜点  Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对

教你轻松读懂Java中的Socket编程

餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一次或多次的读取或写入操作.Read操作用来从IO操作对象读取数据,并将数据传递给用户进程.Write操作用来将用户进程中的数据传递(写入)到IO操作对象. 当所有的Read和Write操作结束之后,用户进程需要调用Close来通知系统其完成对

socket-Java中的Socket编程关于多次输入输出的问题,希望给出解决方法

问题描述 Java中的Socket编程关于多次输入输出的问题,希望给出解决方法 实现了多线程,这是服务端的代码:需求是接受客户端发送的数字,根据数字选择相应的case,当是1的时候要向服务端发送一个user的对象,ObjectInputStream ois=new ObjectInputStream(s.getInputStream());这句话的异常是java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFu

Android中使用socket使底层和framework通信的实现方法_Android

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层 呢?android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用socket通信的方法可以使native和framework自 由通信,具体实现如下: android中使用jni对linux中的socket进行了封装.使用起来十分的方便. 由于android是基于linux的,所以linux的代码会在java之前先执行,所以一般nat

Android中使用socket使底层和framework通信的实现方法

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层 呢?android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用socket通信的方法可以使native和framework自 由通信,具体实现如下: android中使用jni对linux中的socket进行了封装.使用起来十分的方便. 由于android是基于linux的,所以linux的代码会在java之前先执行,所以一般nat