手机客户端与PC服务端的网络通信
前面我们学过电脑与电脑之间的通信,以及多人聊天协议,现在我们就用一台电脑做服务器,一部手机做客户端,来实现手机与电脑之间的通信啦。
首先,异曲同工,在手机上建立客户端与在电脑上是差不多的,首先我们现在电脑上面建立服务器
如下:
package 手机与PC端通信; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public void setup(int port){ try { //创建服务器 ServerSocket host=new ServerSocket(port); System.out.println("通信端口"+port+"成功开启"); while(true){ //等待客户端访问 Socket socket=host.accept(); System.out.println("有人访问了"); //把跟客户端交流的事情交给线程处理 ServerThread st = new ServerThread(socket); //开启线程 st.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args){ //传入端口号 new Server().setup(8888); } }
接下来建立线程来处理socket得到的输入流以及输出流:
package 手机与PC端通信; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class ServerThread extends Thread { private Socket socket; private DataOutputStream dos; public ServerThread(Socket socket){ this.socket=socket; } public void run(){ //得到网络连接socket得到的输出输入流 try { //输入流 InputStream input=socket.getInputStream(); DataInputStream dis=new DataInputStream(input); //得到客户端的输出流 dos=new DataOutputStream(socket.getOutputStream()); //读取客户端发到服务端的字节 while(true){ int msgType=dis.readInt(); int len=dis.readInt(); byte[] bytes=new byte[len]; dis.readFully(bytes); String content=new String(bytes,"GB2312"); System.out.println("客户端说:"+content); //这里是发到客户端的 String replyString = "服务器收到了("+content+")"; bytes = replyString.getBytes("GB2312"); //写进是文字 1 dos.writeInt(1); //输出流写进字节长度 dos.writeInt(bytes.length); //写进字节 dos.write(bytes); //刷新 dos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这些内容在上节中都已经讲过,这里不做过多阐述
接下来就是重点内容啦,就是在Android中建立客户端,这里我们要使用带安卓插件的eclipse来编写
首先处理界面,我大概定义了一个textview来显示聊天内容,editText来进行输入框的角色,再者就是一个发送按钮,这样一个简单的聊天界面就已经完成了,如下,简洁的小界面,读者们可以自行美化界面哈:
(最后记得绑定发送按钮到指定函数哦)
接下来就是在MainActivity中开始动工了,动工之前,讲一个非常重要的函数Handler,我们知道,在UI界面主线程中,我们肯定要获取到输入框输入的文字来发送到服务器上,Android里面的线程是不能直接访问Ui组件的,例如:在另一个线程调用textView。setText(“23232”);在编译的时候是没有问题的,但是在运行时就会报错,所以这时候就要用到handler的函数,我们在这里可以理解为一个中介,子线程将信息绑定在handler上,handler将信息更新到主函数UI上,里面会用到callBack函数,具体代码里讲,万事俱备,只差将网络权限添加到你的手机上了,在AndroidMainfest.xml文件中,在<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />后面添加网络允许代码,就是下面这一句
<uses-permission android:name="android.permission.INTERNET"/>
接下来,就是UI界面MainActivity.java代码如下:
import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { //聊天区域 private TextView textMsgLog; //客户端处理线程 private ClientThread clientThread; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnSend=(Button)findViewById(R.id.btnSend); //聊天显示界面 textMsgLog=(TextView)findViewById(R.id.textMsgLog); Log.i("test", "oooooooooooooo11111"); //创建Handler对象,介于主线程和子线程一个代理,子线程ClientThread将要传递的数据通过 //Handler传递给主进程UI,数据在UI上更新 Handler.Callback callback=new Handler.Callback(){ public boolean handleMessage(Message msg){ // textMsgLog.append("服务器:" + msg.obj.toString() + "\n"); return true; } }; Handler handler=new Handler(callback); clientThread =new ClientThread(handler); clientThread.start(); } //将文本输入框的发送给服务器 public void send(View v){ //得到输入框 EditText editInput = (EditText)findViewById(R.id.editInput); //得到输入框中文字 String msg = editInput.getText().toString(); //调用,写到服务器上,返回成功 boolean result = clientThread.sendText(msg); textMsgLog.append("我:"+msg+"\n"); if(result){ textMsgLog.append("我:"+msg+"\n"); editInput.setText(""); } else { Toast.makeText(this, "发送失败", Toast.LENGTH_LONG).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
和客户端线程,也就是刚才说的子线程代码:
ackage com.example.eetalk; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import android.os.Handler; import android.os.Message; public class ClientThread extends Thread { private Handler handler; private DataOutputStream dos; private DataInputStream dis; private Socket socket; public ClientThread(Handler handler) { this.handler = handler; } public void run() { try { connect(); dos.writeInt(1); dos.writeInt(5); dos.write("hello".getBytes()); while (true) { //读取服务器发过来的数据 int msgType = dis.readInt(); // System.out.println("121"); // int len = dis.readInt(); // byte[] bytes = new byte[len]; dis.readFully(bytes); // String content = new String(bytes, "GB2312"); Message msg = new Message(); msg.what = 1; // msg.obj = content; // handler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } finally { //close(); } } private void connect() throws UnknownHostException, IOException { // socket = new Socket("172.27.35.3", 8888); // dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); } private void close() { if (dis != null) { try { dis.close(); } catch (IOException e) { } } if (dos != null) { try { dos.close(); } catch (IOException e) { } } if (socket != null) { try { socket.close(); } catch (IOException e) { } } } //发送到服务器的 public boolean sendText(String content){ try { // byte[] bytes = content.getBytes("GB2312"); // dos.writeInt(1); // dos.writeInt(bytes.length); // dos.write(bytes); dos.flush(); return true; } catch (IOException e) { e.printStackTrace(); } return false; } }
记住你的手机和你的电脑一定要在同一个局域网,这里可以看出手机的客户端做法与电脑是差不多的,上面手机客户端连接的ip地址是你的电脑连入的ipv4地址,可以在cmd命令里恰如ipconfig来搜寻。
做到这里,将你的app下载到手机,打开服务器,打开手机的应用程序,就可以聊天了,记住打开网络
美美聊天了:
这是服务器
这是手机客户端
做到这里,就可以和手机互发图片和文字啦,这是小编下期的实现目标
相关推荐
总结来说,C#手机QQ协议、WebQQ协议、PCQQ协议的源码分析是一个深入学习网络通信、协议解析和C#编程的好机会。通过研究这些源码,开发者不仅可以提升技术能力,还能了解到即时通讯软件背后的工作机制。
要实现手机与PC间的视频通信,必须选择合适的网络通信协议,如TCP/IP、UDP、WebSocket或WebRTC等。WebRTC是一种实时通信技术,特别适合于低延迟的视频通话。源码中可能包含了处理这些协议的类和接口。 4. **数据...
【联想手机PC套件】是联想公司为用户提供的一个便捷工具,主要用于帮助用户在个人计算机上管理和操作他们的联想智能手机。这个套件集成了多种功能,包括数据同步、备份以及利用手机的GPRS网络进行互联网连接。 首先...
首先,手机与PC之间的通信通常基于网络协议,其中最常用的是TCP/IP(传输控制协议/互联网协议)。在这个场景下,SOCKET通信扮演了关键角色。SOCKET是网络编程中的一个接口,它允许应用程序通过网络发送和接收数据。...
标题中的“android在wifi下手机与PC的socket通信”指的是Android设备通过WiFi网络与个人计算机(PC)之间利用Socket进行数据通信的技术。Socket是网络编程中的一个基础概念,它允许两个网络应用程序通过TCP/IP协议...
* 虚拟网卡:PC网络连接中会多一个RNDIS类型的虚拟网卡,用于将Android手机连接到PC的网络连接上。 * 网卡共享:PC可以共享它的网络连接至Android网卡,允许Android手机通过PC上网。 * IP地址设置:需要修改RNDIS...
- **网络通信协议**: 设计一套简单的协议,如基于HTTP的RESTful API或者自定义的TCP/IP协议,用于手机与PC之间的通信。 - **安全考虑**: 添加身份验证和加密机制,以确保只有授权的手机APP才能对PC进行控制,防止...
总之,要实现手机与PC连接读取服务器数据,开发者需要掌握网络通信协议、API接口设计、设备间的连接方式以及相应的开发工具。这个过程既包括了硬件层面的连接,也涵盖了软件层面的数据交换和处理。
总结来说,手机与PC间的视频监控通过内网实现,关键在于正确配置网络环境、在PC上设置视频服务器,并在手机端找到合适的应用进行连接。理解这些基础知识,你就能轻松搭建起自己的视频监控系统。
这种方法利用蓝牙技术作为传输媒介,建立起手机与PC之间的临时网络连接。 1. **电脑蓝牙配置**: - 打开电脑的蓝牙设备管理器,确保“允许设备访问此计算机”选项被选中。这一步是为了确保手机能够成功配对并连接...
早期的PDA没有网络连接,主要通过串口或红外(IR)与PC同步数据。在项目中,PDA作为数据接收或发送的终端,可能需要编写特定的驱动程序或应用来配合串口通信协议。 **4. 数据交互协议** 为了确保PC与PDA之间的数据...
在Android平台上,实现手机控制PC的关机与重启功能,主要涉及到远程控制技术、网络通信协议和设备权限管理等知识点。下面将详细讲解这些关键点。 1. **远程控制技术**: 远程控制是指在一台设备上操作另一台设备,...
2. **HTTP/HTTPS协议**:HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于客户端(如手机或PC)向服务器发送请求并获取响应。HTTPS(安全套接字层超文本传输协议)是在HTTP基础上加入了SSL/TLS加密...
SyncML协议,全称为Synchronization Markup Language,是一种用于设备间数据同步的标准协议,它使得手机、个人电脑(PC)以及其他智能设备之间的数据交换变得简单而高效。SyncML的设计目标是提供一个开放、标准化的...
手机QQ1[1].4协议这部分则涉及到了QQ客户端与服务器之间通信的协议细节。QQ协议是QQ软件能够实现即时通讯、文件传输、群聊等功能的基础。这些协议通常包括登录验证、消息发送、好友状态更新等多个部分。在易语言实现...
本文提出了一种智能手机与PC服务器通信的设计方法,智能手机端使用AppInventor设计App,并调用Web客户端组件通过HTTP协议与PC端的Flask服务器进行通信。Flask服务器端通过设计WebAPI接收来自智能手机的请求,并返回...
标题中的“PC和手机通讯两端程序基于UDP”指的是在个人计算机(PC)和移动设备(如手机)之间建立通信的一种方式,它利用了用户数据报协议(UDP)。UDP是传输层的一个无连接协议,提供了简单而高效的数据传输服务,...
7. **系统要求**:手机和PC应运行兼容的操作系统,如Android或iOS手机与Windows或macOS的PC。 8. **性能优化**:根据网络环境和设备性能调整设置,以获得最佳的视频质量和流畅度。 9. **应用场景**:远程办公、...
"整合手机和PC到同一局域网" 在这个资源中,我们将探讨如何将手机和PC整合到同一局域网中。这项技术可以让手机和PC之间实现无线连接,并且可以实现文件共享、打印共享、Internet 共享等功能。 首先,我们需要了解...
在Android平台上实现手机控制PC的关机和重启功能,涉及到的主要技术点包括网络通信协议、设备间的数据传输以及Android权限管理。以下是对这些知识点的详细解释: 1. **网络通信协议**:在这个项目中,手机作为...