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();
}
}


}

0 0