`
wang_peng1
  • 浏览: 3954694 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

socket连接

阅读更多

1. Android与PC通讯的第一个例子:

  • PC: Java Server
  • Android:Java Client

Java Server 源代码:

01 public class TCPDesktopServer implements Runnable{
02   
03     public static final String SERVERIP = "192.168.0.149";
04     public static final int SERVERPORT = 51706;
05   
06     public void run() {
07          try {
08              System.out.println("S: Connecting...");
09   
10              ServerSocket serverSocket = new ServerSocket(SERVERPORT);
11              while (true) {
12   
13                   Socket client = serverSocket.accept();
14                   System.out.println("S: Receiving...");
15   
16                   try {
17                       BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
18                       String str = in.readLine();
19                       System.out.println("S: Received: '" + str + "'");
20                     } catch(Exception e) {
21                         System.out.println("S: Error");
22                         e.printStackTrace();
23                     } finally {
24                         client.close();
25                         System.out.println("S: Done.");
26                     }
27   
28              }
29   
30          } catch (Exception e) {
31              System.out.println("S: Error");
32              e.printStackTrace();
33          }
34     }
35   
36     public static void main (String a[]) {
37         Thread desktopServerThread = new Thread(new TCPDesktopServer());
38         desktopServerThread.start();
39     }
40 }

对上边的源代码做一些介绍:
指定Server监听的端口和服务器IP地址。

1 public static final String SERVERIP = "192.168.0.149";
2 public static final int SERVERPORT = 51706;

应用之前所指定的IP和Port创建一个ServerSocket对象。

1 ServerSocket serverSocket = new ServerSocket(SERVERPORT);

用于侦听和捕捉通过Socket连接的客户端。

1 Socket client = serverSocket.accept();

应用Socket创建BufferedReader对象,用于接收Socket Stream中的数据。

1 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

Android Client 源代码:

01 InetAddress serverAddr = InetAddress.getByName("192.168.0.149");//TCPServer.SERVERIP
02 Log.d("TCP", "C: Connecting...");
03 Socket socket = new Socket(serverAddr, 51706);
04 String message = "AndroidRes,Where is my Pig (Android)?";
05 try {
06     Log.d("TCP", "C: Sending: '" + message + "'");
07     PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
08         out.println(message);
09 } catch(Exception e) {
10         Log.e("TCP", "S: Error", e);
11 } finally {
12     socket.close();
13 }

对上边的源代码做一些介绍:
指定Server的IP地址。

1 InetAddress serverAddr = InetAddress.getByName("192.168.0.149");

应用Server的IP和端口建立Socket对象。

1 Socket socket = new Socket(serverAddr, 51706);

根据已经建立的Socket来创建PrintWriter,将信息通过这个对象来发送给Server,其中包含了三个部分:

1 PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);

以上是Android与运行在PC上的Java Server通讯的例子。来源由Anddev.org提供

2. Android与PC通讯的第二个例子:

  • PC: CSharp Server
  • Android:Java Client

通过上边的例子,本人通过一些转换,实现了Android与CSharp Server的通讯方法。原理没有太大差异,仅仅是应用的方法稍有不同。
CSharp Server 源代码:

01 TcpClient ConnectedClient = ServerListener.AcceptTcpClient();
02   
03 NetworkStream netStream = ConnectedClient.GetStream();
04   
05 BinaryReader br = new BinaryReader(netStream);
06   
07 byte[] tempByte = new byte[8192];
08   
09 tempByte = br.ReadBytes(8192);
10   
11 string RecevieString = System.Text.Encoding.Default.GetString(tempByte);

对上边的源代码做一些介绍:
通过TcpListener获得的Client信息创建一个TcpClient对象。

1 TcpClient ConnectedClient = ServerListener.AcceptTcpClient();

从TcpClient对象中提取NetworkStream对象,其目的是建立Socket数据流。

1 NetworkStream netStream = ConnectedClient.GetStream();

建立BinaryReader对象为刚刚创建的NetworkStream提供一个接口,借助于这个接口可以非常方便的读取信息。

1 BinaryReader br = new BinaryReader(netStream);

读取Stream中的byte array数据,转化为string字符串。

1 byte[] tempByte = new byte[8192];
2   
3 tempByte = br.ReadBytes(8192);
4   
5 string RecevieString = System.Text.Encoding.Default.GetString(tempByte);

Android Client 源代码:
这个Android Client所应用的方法与第一个例子中有很大区别,请各位特别注意(通过本人的反复验证,这个算是Java 与CSharp间可行的通讯方法)。

1 String message = "AndroidRes,Where is my Pig (Android)?";
2 Socket socket = new Socket("192.168.0.149", 51706);
3 OutputStream ops=socket.getOutputStream();
4 DataOutputStream dos=new DataOutputStream(ops);
5 dos.write(message.getBytes());
6 dos.close();

对上边的源代码做一些介绍:
同样是建立Socket对象。

1 Socket socket = new Socket("192.168.0.149", 51706);

根据Socket对象创建OutputStream对象,根据名称可以很容易的理解这个对象的目的,它是建立一个输出的NetworkStream。

1 OutputStream ops=socket.getOutputStream();

DataOutputStream类似于BinaryWriter,是为OutputStream建立一个接口,可以通过这个接口向Socket另外一端写数据。

1 DataOutputStream dos=new DataOutputStream(ops);

最后这两行代码是实施写的过程。

1 dos.write(message.getBytes());
2 dos.close();

此片为转载

分享到:
评论

相关推荐

    java socket连接池 实现

    在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。...

    C# Socket连接池

    Socket连接池是网络编程中一个重要的优化手段,它在C#中主要应用于提高网络通信的效率和稳定性。本文将深入探讨“C# Socket连接池”的实现原理、优势以及如何利用线程池技术来构建和优化它。同时,我们也会提及...

    Socket连接-TCP测试

    Socket连接在IT行业中是网络编程中的重要组成部分,主要用于实现客户端与服务器之间的通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它是Socket连接常用的底层...

    Socket连接控制打印机输出

    在本场景中,“Socket连接控制打印机输出”指的是利用Socket连接远程打印机,仅需知道打印机的IP地址,即可实现对打印机的打印控制。这种方式通常适用于局域网或互联网环境中的设备管理,比如远程办公或分布式打印...

    Linux或Windows下判断socket连接状态

    无论是Linux还是Windows操作系统,开发者都需要了解如何判断一个Socket连接的状态,以便于处理异常情况,保证程序的稳定性和可靠性。本文将深入探讨在Linux和Windows环境下,如何通过编程来检测Socket连接是否已断开...

    java socket连接池

    Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经建立的Socket连接,从而减少因频繁创建和销毁Socket连接而产生的开销。在高并发的服务器环境中,Socket连接池能够有效地提升系统效率和响应...

    Socket连接池的简单应用

    ### Socket连接池的简单应用 #### 一、引言 在网络通信中,Socket作为一种基本的通信方式被广泛应用。然而,在实际开发过程中,直接使用系统自带的Socket库可能会遇到各种复杂性和性能上的挑战。例如,频繁地建立...

    [VB]一个Socket连接类,封装了Winsock API

    本篇文章将深入探讨VB中封装Winsock API的Socket连接类,帮助你理解其工作原理和应用。 Winsock,即Windows Socket,是微软为Windows操作系统提供的TCP/IP协议接口。它提供了一套标准的应用程序编程接口(API),...

    一个Socket连接管理器

    Socket连接管理器是一种在计算机网络编程中用于管理多个Socket连接的工具或框架。它通常用于服务器端,帮助处理并发客户端的连接请求,有效地管理和维护这些连接的状态,以便于数据的高效传输。在这个场景中,"一个...

    iOS下的Socket连接demo

    本文将详细解析"iOS下的Socket连接demo",并介绍相关的知识点。 首先,Socket通常被称为套接字,是应用层与传输层之间的一个抽象接口,允许应用程序通过网络发送和接收数据。它提供了进程间通信(IPC)的能力,使得...

    Socket连接示例代码

    在这个"Socket连接示例代码"中,我们将深入探讨Socket的基本概念、工作原理以及如何通过客户端和服务器进行本地或局域网通信。 首先,Socket在计算机网络中扮演着桥梁的角色,它允许两个程序(通常是一个服务器和一...

    android中网口打印机的Socket连接和打印测试数据

    在Android开发中,实现“网口打印机的Socket连接和打印测试数据”涉及到多个技术点,主要涵盖网络通信、设备交互和错误处理等方面。以下是对这些知识点的详细解释: 1. **Socket通信**: - Socket是网络编程的基础...

    c#socket连接服务器

    本主题将深入探讨“C# Socket连接服务器”的相关知识,包括如何建立连接、发送和接收数据,以及如何检测客户端的在线状态。 首先,Socket在计算机网络中是一种基于TCP/IP协议的通信方式,它允许两台或多台计算机...

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表改.rar

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表修改, Windows time_wait过多解决办法解决办法: 修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM...

    fx5以太网socket连接 测试ok.zip

    "fx5以太网socket连接 测试ok.zip"这个文件名暗示了一个使用FX5系列PLC(可编程逻辑控制器)进行以太网Socket通信的测试项目。FX5是三菱电机推出的一款高端PLC,具备强大的网络通讯功能,适用于自动化控制系统的集成...

    Socket连接工具

    Socket连接工具是一款强大的网络调试与检测软件,专为软件开发人员设计,旨在简化网络通信的测试和调试过程。它能够帮助开发者创建本地的Socket服务器(Server)和客户端(Client),支持两种主要的网络传输协议:...

    易语言socket连接超时例程

    易语言socket连接超时例程源码,socket连接超时例程,子程序1,socket,htons,inet_addr,Connect,closesocket,WSAStartup,setsockopt,ioctlsocket,select

    Android Socket连接(心跳检测,断线重连,状态监测等)

    Android Socket连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909

    Socket连接池的经典实例

    一个java socket连接池的典型实例 SocketClient,客户端测试类 SocketAdapter继承Socket类,重新封装socket类 SocketConnectionPool,连接池管理类 StartupSocketServer,socket服务器端的主线程,负责监听端口,当有...

Global site tag (gtag.js) - Google Analytics