androidsocket实例
㈠ 在android如何开发socket应用
Socket和java的模式一样都是Socket socket = new Socket(ip, port);socket.getInputStream()和socket.getOutputStream()接收或发送数据
㈡ android socket有几种方法
/***第一种:客户端Socket通过构造方法连接服务器***/
//客户端Socket可以通过指定IP地址或域名两种方式来连接服务器端,实际最终都是通过IP地址来连接服务器
//新建一个Socket,指定其IP地址及端口号
Socket socket = new Socket("192.168.0.7",80);
/***Socket 客户端 一些常用设置***/
//客户端socket在接收数据时,有两种超时:1.连接服务器超时,即连接超时;2.连接服务器成功后,接收服务器数据超时,即接收超时
//*设置socket 读取数据流的超时时间
socket.setSoTimeout(5000);
//发送数据包,默认为false,即客户端发送数据采用Nagle算法;
//但是对于实时交互性高的程序,建议其改为true,即关闭Nagle算法,客户端每发送一次数据,无论数据包大小都会将这些数据发送出去
socket.setTcpNoDelay(true);
//设置客户端socket关闭时,close()方法起作用时延迟1分钟关闭,如果1分钟内尽量将未发送的数据包发送出去
socket.setSoLinger(true, 60);
//设置输出流的发送缓冲区大小,默认是8KB,即8096字节
socket.setSendBufferSize(8096);
//设置输入流的接收缓冲区大小,默认是8KB,即8096字节
socket.setReceiveBufferSize(8096);
//作用:每隔一段时间检查服务器是否处于活动状态,如果服务器端长时间没响应,自动关闭客户端socket
//防止服务器端无效时,客户端长时间处于连接状态
socket.setKeepAlive(true);
/*** Socket客户端向服务器端发送数据 ****/
//客户端向服务器端发送数据,获取客户端向服务器端输出流
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//代表可以立即向服务器端发送单字节数据
socket.setOOBInline(true);
//数据不经过输出缓冲区,立即发送
socket.sendUrgentData(65);//"A"
//向服务器端写数据,写入一个缓冲区
//注:此处字符串最后必须包含“\r\n\r\n”,告诉服务器HTTP头已经结束,可以处理数据,否则会造成下面的读取数据出现阻塞
//在write()方法中可以定义规则,与后台匹配来识别相应的功能,例如登录Login()方法,可以写为write("Login|test,123 \r\n\r\n"),供后台识别;
bw.write("Login|test,123 \r\n\r\n");
//发送缓冲区中数据,必须有
bw.flush();
/*** Socket客户端读取服务器端响应数据 ****/
//socket.isConnected代表是否连接成功过
if((socket.isConnected() == true) && (socket.isClosed() == false)){//判断Socket是否处于连接状态
//客户端接收服务器端的响应,读取服务器端向客户端的输入流
InputStream is = socket.getInputStream();
//缓冲区
byte[] buffer = new byte[is.available()];
//读取缓冲区
is.read(buffer);
//转换为字符串
String responseInfo = new String(buffer);
//日志中输出
Log.i("TEST", responseInfo);
} //关闭网络
socket.close();
/***第二种:通过connect方法连接服务器***/
Socket socket_other = new Socket();
//使用默认的连接超时
socket_other.connect(new InetSocketAddress("192.168.0.7",80));
//连接超时2s
socket_other.connect(new InetSocketAddress("192.168.0.7",80),2000);
//关闭socket
socket_other.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
㈢ android在线程中socket连接例子
package com.cpa.uri;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientDemo {
public static void main(String[] args) throws IOException, Exception {
ClientDemo client=new ClientDemo();
client.open();
}
private void open() throws Exception, IOException{
Socket s=new Socket("localhost",8000);
InputStream in=s.getInputStream();
OutputStream out=s.getOutputStream();
new Reader(out).start();
new Write(in).start();
}
class Reader extends Thread{
OutputStream out;
public Reader(OutputStream out) {
this.out=out;
setDaemon(true);
}
@Override
public void run() {
try {
Scanner s=new Scanner(System.in);
while(true){
String str=s.nextLine();//读取控制台
out.write(str.getBytes());//发送到服务器
out.write('\n');
out.flush();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.run();
}
}
class Write extends Thread{
InputStream in;
public Write(InputStream in) {
this.in=in;
}
@Override
public void run() {
int b;
try {
while((b=in.read())!=-1){
System.out.println(b);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
**************************
package com.cpa.uri;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerDemo {
public static void main(String[] args) throws Exception {
ServerDemo server=new ServerDemo();
server.start();
}
private void start() throws Exception{
ServerSocket ss=new ServerSocket(8000);
while (true) {
System.out.println("等待客户端连接!");
Socket s=ss.accept();
System.out.println("客户端连接成功:"+s.getInetAddress());
//为这个客户端创建一个服务线程
new Service(s).start();
}
}
class Service extends Thread{
Socket s;
public Service(Socket s){
this.s=s;
}
@Override
public void run() {
try {
InputStream in=s.getInputStream();
OutputStream out=s.getOutputStream();
//服务器向客户写消息
out.write("说口令".getBytes());
out.flush();
Scanner s=new Scanner(in);
while(true){
String str=s.nextLine();
if (str.equals("A friend in need is a friend indeed")) {
out.write("回答正确".getBytes());
out.flush();
}else if (str.equals("ni是不是笨蛋")) {
out.write("是".getBytes());
out.flush();
break;
}else{
out.write("What do you say!".getBytes());
out.flush();
}
}
s.close();
} catch (Exception e) {
}
super.run();
}
}
}
************************
客户端和服务器端java代码,自己改动下就可以变成android代码了.
㈣ android socket通信
首先,你要实现的就是从数据库里读数据,然后通过socket传过去。
但是明明开一个线程就行的,为什么要开两个线程呢。而之所以会出现这个问题就是因为再加上主线程,三个线程的变量全共享了。而线程运行本身就是宏观上并行的,不知道三线程哪个先,哪个后,这也就是为什么有时候有数据,有时候没数据,完全放大的线程的不确定性。
最后线程通知UI要用Handle实现。
{
privatebooleanisConnect=true;
publicvoidrun(){
socket=newSocket(HOST,POST);
output=newPrintWriter(socket.getOutputStream(),true);
input=newBufferedReader(newInputStreamReader(socket.getInputStream(),"gbk"));
while(isConnect){
//传回的XML字符串
xmlback=input.readLine();//无数据会阻塞
//returnxmlback;//从服务器端返回值xmlback
用Handle传回值给主线程,不用return.
}
}
publicStringsendMessage(SendxmlVOsend){//send应该是存值的,不看见用上,自己结合操作数据库改一下
Stringxmlback="";
//生成xml文件转换成字符串(xmlstring)
output.println(xmlstring+" ");
}
publicvoidclose(){
isConnect=false;
input.close();
output.close();
socket.close();
}
}
你试试这个样子写,
㈤ Android Socket通信开发,求详细过程,附加注释,谢谢
服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。
Socket类型为流套接字(streamsocket)和数据报套接字(datagramsocket)。
Socket基本实现原理
TCP与UDP
1基于TCP协议的Socket
服务器端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。accept()方法在没有数据进行接收的处于堵塞状态。(Socketsocket=serversocket.accept()),一旦接收到数据,通过inputstream读取接收的数据。
客户端创建一个Socket对象,指定服务器端的ip地址和端口号(Socketsocket=newSocket("172.168.10.108",8080);),通过inputstream读取数据,获取服务器发出的数据(OutputStreamoutputstream=socket.getOutputStream()),最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输。
㈥ 安卓开发socket开发简单例子 怎么写
package scut;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Sock {
/**
* 服务器端
*
* @author Administrator
*
*/
// 程序入口
public static void main(String args[]) {
try {
// 建立一个ServletSocket ,监听对应的端口,用于监听客户端的连接请求
ServerSocket serverSocket = new ServerSocket(40004);
while (true) { // 循环不断接收客户端的请求
System.out.println("等待客户端请求....");
Socket socket = serverSocket.accept();
// 等待接收
System.out.println("收到请求,服务器建立连接...");
// 返回数据
OutputStream os = socket.getOutputStream();
String msg = "服务器已连接成功...";
os.write(msg.getBytes("utf-8"));
os.close();
socket.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
㈦ 如何用socket实现android手机与手机之间的通信
有两种方案:
1、在PC机上建立服务器,手机与手机之间的通信通过服务器进行中转
2、一部手机作为服务器,另一部手机作为客户端接入该手机
一般用第一种方案,示例代码如下:
1、pc端:
serverSocket=new ServerSocket(5648); //在5648端口进行侦听
Socket sk = serverSocket.accept();//如果有接入,则创建对应的socket;
2、手机端:
socket=new Socket("tobacco5648.xicp.net",5648);//连接socket
3、消息输入输出:
pw=new PrintWriter(socket.getOutputStream()); //消息输出
pw.println("发送消息");
pw.flush();
br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //消息接收
while((str=br.readLine())!=null){
//接收消息
}
㈧ 求一个安卓socket通讯例子:server为Linux C 虚拟机端 ,client为安卓
Android使用的仅仅使用了PC 里边的一个端口
IP自然就是127.0.0.1了,或者是localhost吧
关于5037口和5555口,找到了一个看起来合理的解释:
adb(Android Debug Bridge)包括三个部分:
1)adb client, 运行在PC上(为DDMS,即IDE工作)
2)adb daemon(守护进程), 运行于Emulator(为与Emulator中的VM交互工作);
3)adb server(服务进程), 运行在PC(任务管理器上有),管理着adb client和adb daemon的通信.server与client通信的端口是是5037,
adb server会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adb daemon连接为后面调试使用。