2-3.socket通信

                                    一.Socket通信(不常用了)
(1)工作原理:
①服务器端serverSocke
//创建serverSocket对象,并将其绑定到给定的端口
ServerSocket ss=new ServerSocket(Int port);
//接受客户端连接
Socket socket=ss.accept();
②客户端socket
//以目标主机的IP地址和服务器打开的端口号为参数,实例化Socket类,以便连接到服务器端
Socket socket=new Socket(String dstName,int dstPort);
③二者通信--服务器端调用getOutputStream()方法得到输出流,并将信息传递给客户端;
            客户端调用getInputStream()方法得到输入流,已接收服务端发送的数据信
//获得数据输出流
DataOutputStream dout=new DataOutputStream(socket.getOutputStream());
//获得输入流
DataInputStream dint=new DataInputStream(socket.getInputStream());
(2)示例
①新建一个项目serverSocketActivity,在server.java文件中的main()方法中添加如下代码
try{
	//声明一个服务器端口8888
ServerSocket ss=new ServerSocket(8888);
while(true){
	//打开连接,等待传入请求
Socket socket=ss.accept();
//获得数据输出流
DataOutputStream dout=new DataOutputStream(sock.getOutputStream());
//写入输出流的数据
String str="Socket通信";
//向客户端发送信息
dout.writeUTF(str);
dout.close();
socket.close();
}}catch(IOException e){

}
②新建一个项目SocketActivity,创建connectToServer()方法读取服务端发来的信息
(2-1)public void connectToServer(){
try{
	//创建socket连接
	Socket socket=new Socket("192.168.0.103",8888);
	//获得输入流
DataInputStream din=new DataInputStream(socket.getInputStream())
	//读取服务端发来的信息
String msg=din.readUTF()
//用Toast显示
Toast.makeText(SocketActivity.this,msg,Toast.LENGTH_LONG).show();
}catch(UnknownHostException e){

}
catch(IOException e){

}}
(2-2)在oncreate()方法中调用connectToServer()方法并添加如下代码,防止抛出NetworkOnMainThreadException异常
//调用connectToServer()方法
connectToServer();
//设置线程政策
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskWrites()
.detectDiskReaders()
.detectNetwork()
.penaltyLog()
.build());
//设置虚拟内存政策
StrictMode.setVmPolicy(new StrickMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
(2-3)在AndroidMenifest.xml文件中添加用户权限,运行应用程序访问网络
<uses-permission:name="android.permission.INTERNET"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值