Android Socket 轻松建立连接和发送消息

1.建立Socket连接

    1) Socket 实现了TCP/IP协议,可以连接到网络上的上脑,并收发数据
    2) ServerSocket 用于服务端,可以监听服务端口,等待客户端连接,连接后可以生成用于传输数据的Socket
    3) 创建服务端
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket socket =  serverSocket.accept();  //等待客户端连接
    4) 创建客户端
        Socket socket = new Socket("100.100.28.26", 9999);
        // 注意:注册网络权限;不能在主线程做网络连接
    5) 客户端发送消息
        DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
        writer.writeUTF("嘿嘿,你好啊,服务器..");  // 写一个UTF-8的信息
    6) 服务端接收消息
        DataInputStream reader = new DataInputStream( socket.getInputStream());
        String msg = reader.readUTF();
    7)  服务器等待说明

2.Android客户端、服务端具体实现

1)Android客户端
[java] view plain copy
在CODE上查看代码片派生到我的代码片
package com.example.socketclient;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

/**
* 客户端
*
*/
public class MainActivity extends Activity {

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
}  

private Socket socket;  

/**  
 * 建立服务端连接  
 */  
public void conn(View v) {  
    new Thread() {  

        @Override  
        public void run() {  

            try {  
                socket = new Socket("100.100.28.26", 9999);  
                Log.e("JAVA", "建立连接:" + socket);  
            } catch (UnknownHostException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }.start();  
}  

/**  
 * 发送消息 
 */  
public void send(View v) {  
    new Thread() {  
        @Override  
        public void run() {  

            try {  
                // socket.getInputStream()  
                DataOutputStream writer = new DataOutputStream(socket.getOutputStream());  
                writer.writeUTF("嘿嘿,你好啊,服务器.."); // 写一个UTF-8的信息  

                System.out.println("发送消息");  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }.start();  
}  

}

2)服务端
[java] view plain copy
在CODE上查看代码片派生到我的代码片
package com.example.socketserver;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
* 服务端
*
*/
public class SocketServer{

public static void main(String[] args) {  
    startService();  
}  

/**  
 * 启动服务监听,等待客户端连接 
 */  
private static void startService() {  
    try {  
        // 创建ServerSocket  
        ServerSocket serverSocket = new ServerSocket(9999);  
        System.out.println("--开启服务器,监听端口 9999--");  

        // 监听端口,等待客户端连接  
        while (true) {  
            System.out.println("--等待客户端连接--");  
            Socket socket = serverSocket.accept(); //等待客户端连接  
            System.out.println("得到客户端连接:" + socket);  

            startReader(socket);  
        }  

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

/**  
 * 从参数的Socket里获取最新的消息 
 */  
private static void startReader(final Socket socket) {  

    new Thread(){  
        @Override  
        public void run() {  
            DataInputStream reader;  
            try {  
                // 获取读取流  
                reader = new DataInputStream( socket.getInputStream());  
                while (true) {  
                    System.out.println("*等待客户端输入*");  
                    // 读取数据  
                    String msg = reader.readUTF();  
                    System.out.println("获取到客户端的信息:" + msg);  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }.start();  
}  

}

3.下来我们运行Demo来看一看效果

这里写图片描述

项目源码,点击下载
http://download.csdn.net/detail/smartbetter/9502358

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值