暑假快到了,又得开始找兼职了,上网看了看。大部分的Android程序猿基本就两条路,要么是sdk的开发,要么就是对网络的熟悉,想了想,还是网络这部分的挑战兴大点,所以决定学习学习网络的编程,友情提示,socket还有http的学好,对于http方面的,大家肯定做过一些新浪的手机app等,简单的http基本都是会的,但是今天说的是socket,。。。。。。
从简单开始吧,其实socket也是挺简单的(至少菜鸟的我是这么觉得的),用socket的,不外乎是为了传递数据,而数据基本上就是那几种,所以重要的不是socket的构成什么的,重要的是io的操作,如果对io不熟悉,就怕你用bufferread去向文件输入自定义数组,
对于sockt的话,推荐大家去看《window网络》(太久了,忘记名字了),socket的两个协议,一个是tcp协议,一个是udp协议。
TCP:面向连接的,安全的,速度慢,会反馈确定收到的UDP:不链接的,不安全的,速度快,不确定是否已经接收到,对于本文没多大作用,就不详细说了
先上代码,
java服务器端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//终于完成了
public class MySocket {
FileWriter fileWriter=null;
BufferedWriter bufferedWriter=null;
ServerSocket serverSocket;
public MySocket() {
try {
serverSocket=new ServerSocket(54543);
while(true)
{
Socket socket=serverSocket.accept();
System.out.println("start");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream(), "gb2312"));
String aString=null;
aString=bufferedReader.readLine();
System.out.println(aString);
fileWriter=new FileWriter("d:\\a.txt");
//写入文件操作
bufferedWriter=new BufferedWriter(fileWriter);
bufferedWriter.write(aString);
bufferedWriter.flush();
bufferedWriter.close();
System.out.println("写入完成");
bufferedReader.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new MySocket();
System.out.println("start working");
}
}
然后是Android客户端的:
package com.example.socketc6;
import android.util.Log;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.WriteAbortedException;
import java.net.Socket;
import java.net.UnknownHostException;
import android.R.anim;
import android.app.Activity;
import android.app.Application;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements Runnable {
BufferedWriter bufferedWriter = null;
Socket socket = null;
Button button;
String world = "hello world";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(MainActivity.this).start();
}
});
}
@Override
public void run() {
try {
socket = new Socket("183.26.254.109", 54543);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write("essss");
bufferedWriter.flush();
bufferedWriter.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
代码比较简单,主要作用是传递下字符串,简单的传递下文字,然后把它保存在文件中,为了省点空间,也为了方便大家理解,所以把它变成了单项传送,比较简单,如有疑问,请留言,或致qq1738731967,谢谢
最后加下题外话,大家可能绝得奇怪,明明说socket很简单,为什么我的包名是socketc6呢?钱6个是错在哪儿?那么答案来了,,,,,,,,原因是因为我秀逗了,在wifi状态下测试,然后就呵呵呵呵,最后才突然想起,然后就诞生了一个socket6的版本,对于为什么在wifi下会失败,大家去看看那本网络编程的就明白了,所以
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请记住,不要再wifi状态下测试,不然就修改掩码,好,就这样。。。