Mars Chen培训之socket实现
来源:互联网 发布:万网域名独立控制面板 编辑:程序博客网 时间:2024/05/07 02:11
总结:
(1)程序由服务器端和客户端构成,服务器端负责监听socket接口,客户端通过socket发送数据请求。
(2)如果服务器宽在真机上运行,则客户端生成socket进行要传送手机的ip地址,而不是调试电脑的ip地址。
(3)查看手机ip地址,请参考:http://jingyan.baidu.com/article/ae97a646aa68aebbfd461dc0.html
源代码:
服务器端工程socket:为android程序
(1)Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.socket"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.socket.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.INTERNET" />
</manifest>
(2)SeverThread.java
package com.example.socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SeverThread extends Thread {
public static boolean bStart = false;
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
ServerSocket serverSocket = null;
try {
if (!bStart) {
System.out.println("start a new thread");
SeverThread.bStart = true;
}
System.out.println("Thread is working");
serverSocket = new ServerSocket(4567);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, temp));
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
serverSocket.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
/*
public void run() {
try {
if (!bStart) {
System.out.println("start a new thread");
SeverThread.bStart = true;
}
System.out.println("Thread is working");
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
System.out.print("receive a package");
String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
System.out.println("result -->" + result);
}
catch (Exception e) {
e.printStackTrace();
}
}*/
}
(3)SocketActivity.java
package com.example.socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class SocketActivity extends Activity {
private Button startSocketBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_socket);
startSocketBtn = (Button)findViewById(R.id.startListening);
startSocketBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new SeverThread().start();
};
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.socket, menu);
return true;
}
}
客户端工程socketClient:为java console程序
(1)TCPClient.java:利用TCP协议进行通讯
package com.example.socketclient;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//如果这个socket程序用真机运行或调试的话,该ip地址为手机的ip地址
//手机ip的地址在
Socket socket = new Socket("192.168.1.109", 4567);
InputStream inputStream = new FileInputStream("D://androidapp/SocketClient/test.txt");
OutputStream outputStream = socket.getOutputStream();
byte buffer [] = new byte[4*1024];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0 ,temp);
}
outputStream.flush();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
(2)UDPClient.java:利用UDP协议传送数据
package com.example.socketclient;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
DatagramSocket socket = new DatagramSocket(4567);
InetAddress serverAddress = InetAddress.getByName("192.168.1.109");
String str = "Hello";
byte data [] = str.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, serverAddress, 4567);
socket.send(packet);
System.out.println("send hello to 192.168.1.105");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
- Mars Chen培训之socket实现
- Mars Chen培训之Wifi管理代码实现
- Mars Chen培训之真机调试android程序
- Mars Chen Android培训材料ContentProvider源代码
- Mars Chen Service代码实现总结
- Mars Chen动态注册Broadcast广播监听器的实现
- Mars Chen Android开发教学视频中XML代码实现的总结
- mars android开发之十二:socket编程
- Mars Chen的Broadcast Message Reciver实例总结
- 鱼鱼Chen之学写自己的apk(一) ViewPager实现第一次使用的引导
- 鱼鱼Chen之学写自己的apk(二) 使用SlidingPaneLayout实现漂亮的布局
- <网络编程培训之七> 实现Traceroute
- 鱼鱼Chen之学写自己的apk(八)使用ViewPager和Fragment实现流行的底部导航
- .NET Socket开发之同步Socket实现
- Mars视频之RelativeLayout【中】
- Mars视频之ProgressBar【上】
- Socket DNS查询之实现
- LWIP之SOCKET的实现
- 第5周周报
- TortoiseSVN使用备忘
- 手把手教你写Linux I2C设备驱动
- 开发者应当敬畏和尊重技术
- 作业:三数最大值 ,但是提示没看懂
- Mars Chen培训之socket实现
- Objective-C基础知识
- Oracle学习笔记20150830各种常见Sql函数
- Android基础整理(一)
- Android进阶之大话设计模式
- 在Windows下编译OpenSSL(VS2005)
- java集合框架基本问题
- SAP接口程序方式说明
- HDU 1087 Super Jumping! Jumping! Jumping!(dp)