ANDROID_MARS学习笔记_S01原始版_015_Socket
一、代码
1.xml
(1)main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/startListener"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="启动监听线程"
/>
</LinearLayout>
(2)AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.socket"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SocketActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
2.java
(1)SocketActivity.java
package com.socket; import java.net.DatagramPacket;
import java.net.DatagramSocket; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class SocketActivity extends Activity {
/** Called when the activity is first created. */
private Button startButton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.startListener);
startButton.setOnClickListener(new StartSocketListener());
} class StartSocketListener implements OnClickListener{ @Override
public void onClick(View v) {
new ServerThread().start();
} } //运行时要注释掉一个run方法
class ServerThread extends Thread{
public void run(){
//声明一个ServerSocket对象
ServerSocket serverSocket = null;
try {
//创建一个ServerSocket对象,并让这个Socket在4567端口监听
serverSocket = new ServerSocket(4567);
//调用ServerSocket的accept()方法,接受客户端所发送的请求,是阻塞方法
Socket socket = serverSocket.accept();
//从Socket当中得到InputStream对象
InputStream inputStream = socket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
//从InputStream当中读取客户端所发送的数据
while((temp = inputStream.read(buffer)) != -1){
System.out.println(new String(buffer,0,temp));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
public void run(){
try {
//创建一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//创建一个空的DatagramPacket对象,用来接收数据,udp是一个包一个包接收的,没有流的概念
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客户端所发送的数据,也是阻塞方法
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
System.out.println("result--->" + result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
(2)TCPClient.java
package com.client; import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; public class TCPClient{
public static void main(String[] args){
try{
//创建一个Socket对象,指定服务器端的IP地址和端口号
Socket socket = new Socket("localhost",4567);
//使用InputStream读取硬盘上的文件
InputStream inputStream = new FileInputStream("D://LoseYourself.lrc");
//从Socket当中得到OutputStream
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[4*1024];
int temp = 0;
//将InputStream当中的数据取出,并写入到OutputStream当中
while((temp = inputStream.read(buffer))!=-1){
outputStream.write(buffer,0,temp);
}
outputStream.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
(3)UDPClient.java
package com.client; import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException; public class UDPClient {
public static void main(String[] args) throws UnknownHostException {
System.out.println(">>> --UDPClient-- >>>>>>>>>>>>>>"); // 首先创建一个DatagramSocket对象
DatagramSocket socket;
try {
socket = new DatagramSocket(4567);
// 创建一个InetAddress,代表网络的一个地址
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello socket";
byte data[] = str.getBytes();
// 创建一个DatagramPacket对象,并指定要将这个数据包发送的网络的哪个地址和端口
DatagramPacket packet = new DatagramPacket(data, data.length,
serverAddress, 4567);
// 调用socket对象的send方法,发送数据
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ANDROID_MARS学习笔记_S01原始版_015_Socket的更多相关文章
- ANDROID_MARS学习笔记_S01原始版_005_RadioGroup\CheckBox\Toast
一.代码 1.xml(1)radio.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- ANDROID_MARS学习笔记_S01原始版_004_TableLayout
1.xml <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...
- ANDROID_MARS学习笔记_S01原始版_003_对话框
1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest ...
- ANDROID_MARS学习笔记_S01原始版_002_实现计算乘积及menu应用
一.代码 1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- ANDROID_MARS学习笔记_S01原始版_001_Intent
一.Intent简介 二.代码 1.activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.co ...
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER005_用广播BroacastReciever实现后台播放不更新歌词
一.代码流程1.自定义一个AppConstant.LRC_MESSAGE_ACTION字符串表示广播"更新歌词" 2.在PlayerActivity的onResume()注册Bro ...
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER004_同步显示歌词
一.流程分析 1.点击播放按钮,会根据lrc名调用LrcProcessor的process()分析歌词文件,得到时间队列和歌词队列 2.new一个hander,把时间队列和歌词队列传给自定义的线程类U ...
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER003_播放mp3
一.简介 1.在onListItemClick中实现点击条目时,跳转到PlayerActivity,mp3info通过Intent传给PlayerActivity 2.PlayerActivity通过 ...
- ANDROID_MARS学习笔记_S01原始版_022_MP3PLAYER002_本地及remote标签
一.简介 1.在main.xml中用TabHost.TabWidget.FrameLayout标签作布局 2.在MainActivity中生成TabHost.TabSpec,调用setIndicato ...
随机推荐
- ASP怎样获得代码中第一张图片地址
'把pattern 又修改了下 'code要检测的代码 'http://www.knowsky.com/asp.asp 'leixing html 或者ubb 'nopic 代码没有图片时默认值 fu ...
- 【Excel VBA】金额大写转换
=IF(ROUND(A1,2)<0,"金额为负无效",IF(ROUND(A1,2)=0,"零元",IF(ROUND(A1,2)<1,"&q ...
- PL/SQL Developer 使用中文条件查询时无数据的解决方法
PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:select userenv('language') from dual; 显示:SIM ...
- ###学习《C++ Primer》- 4
点击查看Evernote原文. #@author: gr #@date: 2014-10-16 #@email: forgerui@gmail.com Part 4: STL关联容器(第11章) 一. ...
- 输出一个等边三角形的字母阵,等边三角形的两腰为字母A,往里靠依次字母大一个(详细题目文章中描述)
题目简单的描述就是输出这么一个金字塔型的字母阵(等边三角形) /* A ABA ABCBA */ /* //解法①:对称轴法 #import <stdio.h> int main() { ...
- 2) LINQ编程技术内幕--yield return
yield return 使用.NET的状态机生成器 yield return关键词组自动实现IDisposable,使用这个可枚举的地方, 还存在一个隐含的try finally块. 示例代码: c ...
- 常用终端及git命令
终端常用命令 1,打开终端,git version 查看版本 2,pwd 打印工作目录 3,ls(list简写)查看当前目录的所有文件 4,clear 清掉屏幕 5,cd (change direct ...
- [leetcode] 405. Convert a Number to Hexadecimal
https://leetcode.com/contest/6/problems/convert-a-number-to-hexadecimal/ 分析:10进制转换成16进制,不能用库函数,刚开始,我 ...
- HDOJ 1422 重温世界杯 -- 动态规划
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1422 Problem Description 世界杯结束了,意大利人连本带利的收回了法国人6年前欠他们 ...
- http数据包解析碰到gzip压缩格式的解压
其中在做http数据包临控时碰到gzip压缩格式,在网友发布的一些技术文章基础上,经过一段时间的研究.调试,终于解析成功.现将核心代码公布于此,希望能够和大家一起共同学习交流.注:以下代码需要依赖zl ...