您的位置:首页 > 理论基础 > 计算机网络

android网络通信————Scoket

2015-07-19 20:07 543 查看
今天基于eclipse构建了一个简单的服务器端,完成了客户端和服务器端的简单通信,下面记录一下自己学习的成果。

Socket,俗称套接字,相当于一个接口,一个服务器有很多接口,提供很多服务,每一种服务对应一个scoket,服务器就像一个插座,socket就像一个插头,对应的socket去匹配对应的服务器接口。Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,一组接口。Socket用于描述ip地址和端口,是一个通信的句柄。

服务器端对应socket:

ServerSocket:服务器的接口,另外必须定义一个socket来接收服务器端获得的socket。

客户端对应socket:

Socket:用于传输及获得数据。

关于socket的构造方法,如果有不懂的同学请自行查阅,这里就不过多叙述了。下面开始贴代码~

服务器端(使用的是eclipse for javaee版本,tomcat为服务器,java语言编写)

import java.io.IOException;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class MyServer {

public static void main(String[] args) {

try {

ServerSocket server = new ServerSocket(8899);

while (true) {

System.out.println("execute 1\n");

Socket client = server.accept();

System.out.println("execute 2\n");

OutputStream out = client.getOutputStream();

System.out.println("execute 3\n");

String msg = "hello android";

out.write(msg.getBytes());

System.out.println("execute 4\n");

client.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}



成功运行如上图所示,服务器已经开启

下面是android客户端的代码,由于布局很简单,我就不贴了,就两个控件,一个按钮一个textview。

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button button;
private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textview);
button = (Button) findViewById(R.id.httppost);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//开启新线程进行网络通信
new Thread(new Runnable() {
@Override
public void run() {
Socket socket= null;
try {

//新建socket参数一为你电脑的ip地址,参数二为端口号
socket = new Socket("10.16.224.147",8899);
Log.e("socket","success");

//得到客户端传来的输入流
InputStream inputStream=socket.getInputStream();

//读取数据
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder=new StringBuilder();
String line="";
if ((line=bufferedReader.readLine())!=null){
builder.append(line);
}
inputStream.close();
Message message=new Message();
message.what=1;
message.obj=builder.toString();
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}

}
}).start();

}
});
//线程接收完毕数据后更新textview的内容
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==1){
textView.setText(msg.obj.toString());

}

}
};

}

}


效果如图,一开始的时候:



点击按钮后



以及点击按钮后的服务器端的变化情况:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: