本文主要是介绍13.1基于TCP的Socket网络通信及Demo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、服务器端
二、客户端
三、遇到连接不上的问题解决办法
四、加入等待超时处理
一、服务器端
在PC上运行,仅仅建立ServerSocket监听,并使用Socket获取输出流输出。该ServerSocket将会一直监听,等待客户端程序的连接。
//基于TCP的Socket网络通信例程 服务器端
public class SimpleServer {public static void main(String[] args) throws IOException{{//创建一个ServerSocket,用于监听客户端Socketde连接请求ServerSocket ss = new ServerSocket(30050);//采用循环不断的接收来自客户端的请求while(true){//每当接收到客户端Socket的请求,服务器端也对应产生一个SocketSocket s = ss.accept();OutputStream os = (OutputStream) s.getOutputStream();os.write("您好,您收到了服务器的消息!\n".getBytes("utf-8"));//关闭输出流,关闭Socketos.close();s.close();}}}
}
接下来的代码用于打开Socket对应的输出流,并向输出流中写入一段字符串数据。这里强行 指定使用UTF-8字符集进行编码,可以避免乱码。
二、客户端
仅仅使用Socket建立与指定IP地址、指定端口的连接,并使用Socket获取输入流。
/**
* 基于TCP的Socket网络通信例程 Android端
*@author dahaiChang
*created at 2019/8/16 10:45
*/
public class MainActivity extends Activity {private TextView show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = findViewById(R.id.show);new Thread(){@Overridepublic void run() {super.run();try {//建立连接到远程服务器的SocketSocket socket = new Socket("192.168.1.128", 30050);//加入10s超时及处理socket.setSoTimeout(1000);//将Sockt对应的输入流包装成BufferReaderBufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//进行普通IO操作String line = br.readLine();show.setText("来自服务器的数据:" + line);} catch (SocketException e) {e.printStackTrace();Log.e(TAG,"请求超时");} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}.start();}
}
由于建立网络连接和 通信是不稳定的,所需时间也不确定,因此需要在子线程中完成网络连接。因此在配置文件中添加网络权限。
<uses-permission android:name="android.permission.INTERNET"/>
三、遇到连接不上的问题解决办法
1、客户端与服务器端要处于同一个局域网中
2、PC端的防火墙要关闭
四、加入等待超时处理
在实际应用中,程序可能不想让执行网络连接、读取服务器数据的进程一直阻塞,要加入等待 超时处理。
//加入10s超时及处理socket.setSoTimeout(1000);
Demo下载链接:https://github.com/dahaiChang/SocketClient
这篇关于13.1基于TCP的Socket网络通信及Demo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!