TCP链接从服务器到客户端DEMO
2016-08-24 17:50
274 查看
我们先启一个服务,用来做服务器端。所以现在主线程中起一个服务。
由于网络连接不允许放在主线程中操作,所以我们得新启一个线程。在新启的线程中操作:
新建一个类实现Running。
最后不要忘了加网络权限:
这样我们的服务器端就搭建好了
下面来看看客户端是怎么搭建起来的:
package com.android.tcpservice; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.android.tcpservice.service.TCPService; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init(){ Intent intent = new Intent(this, TCPService.class); // this.startService(intent); } }
由于网络连接不允许放在主线程中操作,所以我们得新启一个线程。在新启的线程中操作:
package com.android. 4000 tcpservice.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.annotation.Nullable; import android.util.Log; import com.android.tcpservice.TCPLogic; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; /** * Created by xalo on 16/8/24. * 服务器 */ public class TCPService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); //写一个匿名类,新起一个线程 new Thread(new Runnable() { @Override public void run() { Log.d("TCP", "TCP Thread is running 启动了"); try { //接口服务(监听接口) ServerSocket ss = new ServerSocket(50000); //获得链接(阻断式)这条数据是阻塞式的 Socket socket; //接受消息 while ((socket = ss.accept()) != null) { new Thread(new TCPLogic(socket)).start(); } Log.d("XML", socket.getInetAddress().toString()); } catch (IOException e) { e.printStackTrace(); } Log.d("TCP", "TCP Thread is end 结束了"); } }).start(); } }
新建一个类实现Running。
package com.android.tcpservice; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; /** * Created by xalo on 16/8/24. */ public class TCPLogic implements Runnable { Socket socket; public TCPLogic(Socket socket) { this.socket = socket; } @Override public void run() { try { InputStream in = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String str; while ((str = br.readLine()) != null) { Log.d("RECIVER", str); } } catch (IOException e) { e.printStackTrace(); } } }
最后不要忘了加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
这样我们的服务器端就搭建好了
下面来看看客户端是怎么搭建起来的:
package com.android.tcpclient; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 */ public class MainActivity extends AppCompatActivity { Socket socket; // BufferedWriter bw; PrintWriter pw; Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); new Thread(new Runnable() { @Override public void run() { try { connect(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } private void init() { btn = (Button) findViewById(R.id.btn_send); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendMsg("hello"); } }); } //网络连接不允许在主线程执行 private void connect() throws IOException { InetAddress address = InetAddress.getByName("localhost"); socket = new Socket(address, 50000); //发送消息 //以我为参考系向外发流 OutputStream out = socket.getOutputStream(); //缓存区满了一次性发出去 // bw = new BufferedWriter(new OutputStreamWriter(out)); pw = new PrintWriter(out); // bw.write("hello"); // //疏通 // bw.flush(); // //关闭 // socket.close(); } private void sendMsg(String msg) { // try { // pw.write(msg); //换行,接受的时候是按行读,不换行接受服务器认为这行没完。 pw.println(msg); pw.flush(); // } catch (IOException e) { // e.printStackTrace(); // } } private void closeSocket() { try { // pw.flush(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); closeSocket(); } }
相关文章推荐
- TCP链接从服务器到客户端DEMO
- python socket之tcp服务器与客户端demo
- Android TCP 文件客户端与服务器DEMO介绍
- Android TCP 文件客户端与服务器DEMO
- 基于TCP的服务器和客户端的简单收发Demo
- 客户端服务器TCP链接异常状态分析
- TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)
- c++做服务器,java当客户端,采用 tcp协议之相互通信demo
- python socket之tcp服务器与客户端demo
- Android TCP 文件客户端与服务器DEMO
- Android TCP 文件客户端与服务器DEMO
- Winsocket入门教程一:多线程阻塞式服务器和阻塞式客户端程序(TCP)
- tcp和udp多线程的epoll服务器+客户端源代码
- TCP 阻塞模型下服务器和客户端的建立步骤
- Winsocket入门教程二:非阻塞式服务器和客户端程序(TCP)
- TCP服务器接收多个客户端连接
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- tcp和udp多线程的epoll服务器+客户端源代码
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 某实例+修改 Winsock实现基于TCP的客户端/服务器通信