• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android网络编程的Socket通信总结

Android网络编程的Socket通信总结

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android socket编程,android socket通信,android socket,android socket聊天,android socket实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android网络编程的Socket通信总结


创建服务器端的步骤:
1,指定端口实例化一个ServerSocket

2,调用ServerSocket的accept方法等待连接期间阻塞

3,获取位于底层的Socket流进行读写操作

4,将数据封装成流

5,对Socket进行读写

6,关闭流

创建客户端的步骤:

1,通过IP地址和端口实例化Socket,请求连接服务器

2,获取位于底层的Socket流进行读写操作

3,将数据封装成流(BufferedReader/PrintWriter,DataOutputStream/DataInputStream)的实例

4,对Socket进行读写

5,关闭流

使用ServerSocket创建服务器端:

 

public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		  //创建一个ServerSo查看特,用于监听客户端Socket的连接请求
           ServerSocket ss=new  ServerSocket(3000);
           while(true){
        	   //每当接收到客户端Socket的请求,服务器端也对应产生一个Socket,没接收到请求就等待。。
        	   Socket s=ss.accept();
        	   OutputStream os=s.getOutputStream();//服务器端产生的Socket获取输出流
        	   os.write("您好,您收到了来自服务器的祝福!\n".getBytes());
        	   os.close();
        	   s.close();
           }
	}
客户端使用Socket通信:
测试环境是PC端服务器,手机当客户端,PC和手机要连接同一个局域网,PC和手机在同一网段
package com.example.simpleclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends Activity {
     TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text=(TextView) findViewById(R.id.text);
        new Thread(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
									
					try {
						//建立连接到远程服务器的的Socket,Ip是服务器端PC的IP,测试环境是PC端服务器,手机当客户端,PC和手机要连接同一个局域网,PC和手机在同一网段
						Socket socket = new Socket("192.168.88",3000);
						//将Socket对应的输入流包装秤BufferedReader
						BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
						String line=br.readLine();
						text.setText("来自服务的数据:"+line);
						br.close();
						socket.close();
					} catch (UnknownHostException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}									
			}
        	
        }.start();
    }
   
}
 
   
客户端和服务器端的输入输出流的问题容易搞混淆:如下图

 

\

在客户端:

socket.getInputStream();从socket读来自服务器的数据

socket.getOutputStream();向socket中写数据,传给服务器,服务器在它的socket的输入流读这个数据

在服务器端:

socket.getInputStream();从socket读来自客户端的数据

socket.getOutputStream();向socket中写数据,传给客户端,客户端在它的socket的输入流读这个数据

就是说客户端和服务器端的输入输出流是对应的,输入流连接到输出流

输入输出流的包装:

第一种方法:数据二进制流

DataInputStream in=new DataInputStream(socket.getInputStream());//接收客户端信息
DataOutputStream out=new DataOutputStream(socket.getOutputStream());  //向客户端发送消息
第二种方法:
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

socketClient,java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class socketClient extends Activity {
	private Button button;
	private TextView text;
	private EditText edit;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		button = (Button) findViewById(R.id.button);
		edit = (EditText) findViewById(R.id.edit);
		text = (TextView) findViewById(R.id.text);

		button.setOnClickListener(new View.OnClickListener() {
			private Socket socket = null;

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				String sendMsg = edit.getText().toString() + "\r\n";

				try {
					socket = new Socket("192.168.0.37", 8888); // 创建Socket,其中ip地址为我的PC机器的地址,手机通过wifi上网和服务器在一个网段

					// PrintWriter out = new PrintWriter(new BufferedWriter(new
					// OutputStreamWriter(socket.getOutputStream())),true);
					// out.println(sendMsg);
					//					
					// BufferedReader in = new BufferedReader(new
					// InputStreamReader(socket.getInputStream()));
					// String readMsg = in.readLine();
					// if(readMsg !=null){
					// text.setText(readMsg);
					// }else{
					// text.setText("错误");
					// }
					//					
					// out.close();
					// in.close();
					// socket.close();

					DataOutputStream out = new DataOutputStream(socket
							.getOutputStream()); // 向服务器发送消息
					out.writeUTF(sendMsg);
					out.flush();

					DataInputStream in = new DataInputStream(socket
							.getInputStream()); // 接收来自服务器的消息
					String readMsg = in.readUTF();
					if (readMsg != null) {
						text.setText(readMsg);
					}
					out.close();
					in.close();
					socket.close();

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
}

Server.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public Server(){
		new ServerThread().start();
	}
	class ServerThread extends Thread{
		public void run() {
			try {
				ServerSocket ss=new ServerSocket(8888); ////创建一个ServerSocket对象,并让这个ServerSocket在8888端口监听
				while(true){
					Socket socket=ss.accept(); //调用ServerSocket的accept()方法,接受客户端所发送的请求,如果客户端没有发送数据,那么该线程就停滞不继续
//					try {
//						BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  //接收客户端信息
//						String readline = in.readLine();
//						System.out.println("readline:"+readline);
//						
//						PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
//						out.println("link server success");
//						
//						in.close();   //关闭流
//						out.close();//关闭流
//					    socket.close();//关闭打开的socket
//						
//					} catch (Exception e) {
//						// TODO: handle exception
//					}finally{
//					//	socket.close();//
//					}
					try {
						DataInputStream in=new DataInputStream(socket.getInputStream());//接收客户端信息
						String readline=in.readUTF();
						System.out.println(readline);
							
						DataOutputStream out=new DataOutputStream(socket.getOutputStream());  //向客户端发送消息
						out.writ



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Socket for android 简单实例,socketandroid
  • Android网络编程(二)HttpClient与HttpURLConnection
  • Android网络编程的Socket通信总结

相关文章

  • 2017-05-26traceroute和tracert的区别
  • 2017-05-26Android蓝牙技术Bluetooth初体验
  • 2017-05-26Android开发学习——搭建开发环境,android搭建
  • 2017-05-26android 编程小技巧(持续中)
  • 2017-05-26linux设备驱动程序之时钟管理(2)----又见结构
  • 2017-05-26WebView,androidwebview
  • 2017-05-26[Android]数据篇,android数据
  • 2017-05-26高并发低基数多字段任意组合查询的优化
  • 2017-05-26andriod 获得drawable下所有图片,
  • 2017-05-26总结一下Android中主题(Theme)的正确玩法,androidtheme

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 微信第三方登录(个人笔记),android第三方
    • Android源码解析--SwipeMenuListView仿QQ聊天左滑
    • Android代码优化小技巧,android代码小技巧
    • Android Studio 2.1 Preview有那些更新内容
    • Postgresql通过td_fdw连接查询 MS SQL Serever 2008 表
    • PendingIntent 显示通知,pendingintent通知
    • 14条Android Studio常用的的配置
    • Unity编译时找不到AndroidSDK的问题 | Unable to list target platforms(转载),unityengine.ui找不到
    • android:listview实现qq,微信好友列表(头像,昵称,个性签名)
    • Android群英传笔记系列一view的介绍,android群英

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有