Android 中socket编程(客户端和服务器端)

 无论是TCP还是UDP通信,一定要在AndroidManifest.xml中添加如下代码    添加在 <application android:label="@string/app_name" 之前就行

<uses-permission android:name="android.permission.INTERNET"/> 

TCP 协议的:

服务器端:

步骤1:调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定的端口上。

步骤2:调用accept(),监听连接请求,如果有客户端接入,则接受客户端的连接,返回一个通信的套接字

步骤3:调用Socket类的getOutputStream()和getInputStream获得输出和输入流,用来接收和发送数据

步骤4:关闭通信套接字


ServerSocket serverSocket = null;

try{   /// try  catch 一定要有

serverSocket = new ServerSocket(5000);//指定监听端口为5000        端口号1024之后的用户可以自己用

Socket socket = serverSocket.accept();  //监听连接请求    如果监听不到会一直阻塞在这里

InputStream ins = socket.getInputStream(); //获取输入流

PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);  //获取输出流

ins.read(data); //data为自己分配的byte数组   如果接收不到数据会一直在这里阻塞

String sendStr = new String(data);
        out.println(
data);

out.flush();//将数据发出去

}catch(InterruptedIOException e){

//超时错误

e.printStackTrace();

//IO异常

}catch(IOException e){

//打印错误

e.printStackTrace();

}finally{

//判断是否初始化ServerSocket对象,如果初始化则关闭serverSocket

if(serverSocket  !=  null){

try{

serverSocket.close();

}catch(IOException e){

e.printStackTrace();

}

}

客户端:

步骤1: 调用Socket()创建一个流套接字,并连接到服务器端

步骤2: 调用Socket类的getOutputStream()和getInputStream方法获取输入和输出流,开始网络数据的发送和接收

步骤3: 关闭通信套接字

示例代码:

try{

Socket socket = new Socket(192.168.1.125,5000);

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //生成输入流

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(out.getOutputStream)));

String msg = "hello world";

out.write(msg);//写入

out.flush();//刷新,发送

socket.close();

}catch(UnknownHostException e){

e.printStackTrace();

}catch (IOException e){

e.printStackTrace();

}

UDP通信:

服务器端:

步骤1:调用DatagramSocket(in port)创建一个数据报套接字,并绑定到指定端口上

步骤2:调用DatagramPacket(byte[] buf,int length),建立一个字节数组以接收UDP包

步骤3:调用DatagramSocket类的receive(),接收UDP包

步骤4:关闭数据报套接字。

示例代码:

//接收的字节大小   

byte [] msg = new byte[1000];

//实例化一个DatagramPacket类

DatagramPacket dp = new DatagramPacket(msg,msg.length);

//新建一个DatagramSocket类

DatagramSocket ds = null;

try{

//UDP服务器监听的端口

ds = new DatagramSocket(5000);

//准备接收数据

ds.receive(dp);

}catch(SocketException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}finally{

//如果 ds对象不为空,则关闭ds对象

if(ds != null){

ds.close();

}

}

UDP客户端的代码:

步骤1:调用DatagramSocket()创建一个数据包套接字

步骤2:调用DatagramPacket(byte【】 buf,int offfset,int length,IntentAddress address,int port),建立要发

送的数据包

步骤3: 调用DatagramSocket类的send()发送UDP包

步骤4: 关闭数据报套接字

示例代码如下:

//定义要发送的信息 

String msg = "hello world"

//新建一个DatagramSocket 对象

DatagramSocket ds = null;

try{

// 初始化DatagramSocket()对象

ds = new DatagramSocket();

//初始化InetAddress对象

InetAddress serverAddr = InetAddress.getByName("127.0.0.1");

DatagramPacket dp;

//初始化DatagramPacket对象

dp = new DatagramPacket(msg.getBytes(),msg.length(),serverAddr,UDP_SERVER_PORT);

ds.send(dp);

}catch(SocketException e){

e.printStackTrace();

}catch(UnknownHostException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}finally{

if(ds != null){

ds.close();

}

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值