简单的使用Socket实现数据通信

来源:互联网 发布:奥拉朱旺数据 编辑:程序博客网 时间:2024/04/29 20:05

在传输数据的过程中,需要通过一个双向的通信链接实现数据的交互。在这个传输过程中,通常将这个双向链路的一段称为Socket,一个Socket通常由一个IP地址和一个端口号来确定。

下面使用Socket来实现一个简单的数据通信:

  • 服务端
package server;import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;/*Eclipse*/public class serverSocekt {    public static void main(String[] args) throws IOException{        ServerSocket ss = new ServerSocket(30000);         while(true){            Socket s = ss.accept();            PrintStream ps = new PrintStream(s.getOutputStream());            ps.println("啊啊啊啊啊啊!");            ps.close();            s.close();        }    }}
  • 客户端
package com.mystudy.kibi.sockettest;import android.os.StrictMode;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;//Android Studiopublic class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            new Thread(){                @Override                public void run() {                    try {                        connect();                    } catch (IOException e) {                        Log.e("====>","失败");                        e.printStackTrace();                    }                }            }.start();        }    });}private void connect() throws IOException {    Socket socket = new Socket("192.168.0.101",30000);    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));    String line = bufferedReader.readLine();    Log.e("====>",line);    bufferedReader.close();    socket.close();}

}

此外:网络请求需要添加权限:

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

注意:google不再允许网络请求(HTTP、Socket)等相关操作直接在Main Thread类中,所以要放在子线程里。
直接在main Thread 进行网络操作的方法,网上给出的,我测试下来可行,在发起Http请求的Activity里面的onCreate函数里面添加如下代码:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()          .detectDiskReads().detectDiskWrites().detectNetwork()          .penaltyLog().build());  StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()          .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()          .penaltyLog().penaltyDeath().build());  
0 0
原创粉丝点击