使用Socket沟通

当两台电脑TCP/IP协议进行通讯。平时Socket对象来表示该通信接口的两端,并通过Socket生产I/O流进行网络通信。

其中ServerSocket对象可以接收从连接的其他通信实体的请求。这个目的是用于侦听client的Socket连接。假设没有连接,它将一直处于等待状态。

在本文中将创建一个server端的ServerSocket 和 手机client的Socket . 使它们建立连接。产生I/O流,在手机上显示获取的数据。

终于得到的结果例如以下图所看到的。

首先建一个Java项目。用来创建ServerSocket. 代码例如以下

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {

	public static void main(String[] args) throws IOException {
		//创建一个ServerSocket,用于监听clientSocket的连接请求
		ServerSocket ss = new ServerSocket(30000);
		System.out.println("server端已准备接受请求");
		//使用循环不断接收来自client的请求
		while(true){
			//每当接收到一个clientSocket的请求。server端也会相应产生一个Socket对象
			Socket s = ss.accept();
			OutputStream os = s.getOutputStream();
			//输出字符串。并强行使用UTF-8字符集进行编码
			os.write("您好。您收到了server的新年祝福!

\n".getBytes("utf-8"));
			//关闭输出流,关闭Socket
			os.close();
			s.close();
		}
	}

}

然后建立一个Android项目,activity_main.xml 代码 例如以下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${packageName}.${activityClass}" >

    <EditText
        android:id="@+id/show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

MainActivity.java 代码 例如以下

package com.wyb.simpleclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends Activity {

	private EditText show;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		show =  (EditText)findViewById(R.id.show);
		///创建一个新线程来进行网络操作
		new Thread(){

			@Override
			public void run() {

				try {
					//建立连接到远程server的Socket
					Socket socket = new Socket("192.168.0.104",30000);
					//将Socket相应的输入流包装成BufferedReader
					BufferedReader br = new BufferedReader(
							new InputStreamReader(socket.getInputStream()));
					//进行普通的I/O操作
					String line = br.readLine();
					//在该线程中控制UI中的EditText控件显示内容
					show.setText("来自server的数据: "+ line);
					//关闭流、socket
					br.close();
					socket.close();
				} catch (UnknownHostException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}.start();
	}
}

代码其中192.168.0.104 为本机的IP地址 查询本机IP地址能够通过在開始中输入 cmd 进入控制台界面,然后输入 IPconfig  按回车 就可以得到相关信息。

因为在本项目其中使用到了网络通信。因此一定要再AndroidManifest.xml其中配置訪问互联网的权限。

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

从Android2.3以后的版本号中。Android平台不同意直接在UI线程建立网络连接。访问网络资源。

因此,有必要在新的线程与网络相关的操作。用在本项目上的使用

new Thread() 要创建一个新的线程。 控制新的线程UI该 EditText 控制显示得到的内容。

但是,一般情况下。UI 在其他线程的控制是不可操作。除ProgressBar 和EditText 外(现在我知道)

时间: 2024-11-07 20:06:55

使用Socket沟通的相关文章

Java Socket 编程

1. 背景 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要

Java基础知识—网络Socket(六)

概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要发送的数据的数据包. Socket编程 套接字使用TCP提供了两台计算机之间的通信机制. 客户端程序创建一个套接字,并尝试连接服务器的套接字.当连接建立时,服务器

Socket、Servlet、Tomcat

一.Socket Socket是网络编程接口(API),使得开发者可以方便地使用TCP\IP协议进行数据的传输,其客户端与服务端的交互流程为: 二.Http协议 Web应用程序主要使用HTTP协议,但HTTP协议本身存在两个问题:无状态和内容的文本表示.对于前者来说,没有记录多个请求之间的关系,而对后者来讲,如果使用Java来编程,需要进行文本和Java类型的转换. 三.Servlet Java针对Web提出了Servlet规范,即提供了Java与HTTP协议沟通的接口,这意味着Java可以以直

从零开始学Python第八周:网络编程基础(socket)

Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套接字是一个双向的通信信道的端点.套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程 要创建一个套接字,必须使用Socket模块的socket.socket()方法 在socket模块中的一般语法: s = socket.

Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

python中的socket通信

协议的概念 不同的国家说不同的语言人门想沟通就需要用英语,只要有一种大家都认可都遵守的协议即可,这种方式在计算机上要遵守的网络通信协议叫做TCP/IP协议早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的网络协议,互不兼容为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)就是通用协议标准.因为互联网协议包含了上百种协议标准,但是最重要的两个

在线白板,基于socket.io的多人在线协作工具

首发:个人博客,更新&纠错&回复 是昨天这篇博文留的尾巴,socket.io库的使用练习,成品地址在这里. 代码已经上传到github,传送门.可以开俩浏览器看效果. 现实意义是俩人在线交流时说不明白,这时有个白板就好了,两人都能在上面写写画画,帮助沟通. 把github的readme搬过来—— 此项目用于socket.io技术的使用演示 1.安装node.js 2.在某个文件夹下执行npm install socket.io 3.将源码拷贝到该文件夹下 4.执行node main.js

对.Net WebSocket 和Socket的原理的思考

今早上班路上接到了一个朋友的微信信息,问我对WebSocket 是否熟悉,一楞,印象之中没有用过这个类....来到公司后,得空问了一下度娘,原来这是一个随着HTML5推出的一种新协议,意义在于能实现浏览器与服务器全双工通信(full-duplex).度娘对此的解释是: 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器.这种传统的HTTP request

读Socket流时产生阻塞的解决方案

在用socket写一个服务器时遇到了问题于是将主要的问题抽了出来,代码如下,由于代码很简单于是也没有注释. public class Main { private static ServerSocket serverSocket; private final static ExecutorService exec = Executors.newFixedThreadPool(30); public static void main(String[] args) { try { serverSoc