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();
}
}
}
![](http://img.blog.csdn.net/20150719201745588?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
成功运行如上图所示,服务器已经开启
下面是android客户端的代码,由于布局很简单,我就不贴了,就两个控件,一个按钮一个textview。
效果如图,一开始的时候:
![](http://img.blog.csdn.net/20150719202513208?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击按钮后
![](http://img.blog.csdn.net/20150719202537495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以及点击按钮后的服务器端的变化情况:
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()); } } }; } }
效果如图,一开始的时候:
点击按钮后
以及点击按钮后的服务器端的变化情况:
相关文章推荐
- https原理:证书传递、验证和数据加密、解密过程解析
- https原理:证书传递、验证和数据加密、解密过程解析
- hdu 4035 可能性DP 成都网络游戏
- Linux网络基础设施配置
- 天下武功尽出LAMP之http篇(2)
- HTTP Status 500 - Error instantiating servlet class test.Test
- 云计算和大数据时代网络技术揭秘(十)虚拟化网卡
- LightOJ 1153 (网络流最大流 sap)
- poj 1149 PIGS (网络流最大流Dinic)
- hdu 3549 Flow Problem ek算法,网络流
- 使用HttpClient访问网络
- HTTP返回状态码说明
- 计算机网络(二)
- 关于HttpServlet和Servlet以及doPost和doGet关系
- HTTP头部解释,HTTP头部详细分析,最全HTTP头部信息
- 基于 OpenFlow 实现网络虚拟化
- Http请求详解
- 网络安全文章list
- 网络安全文章list
- 关于 CentOS 7 网络设置