Java网络编程上之Socket服务端编程
来源:互联网 发布:win10配置php-5.6.22 编辑:程序博客网 时间:2024/05/29 09:14
本篇幅是java网络编程的上篇:socket服务端编程,还有下篇:socket客户端编程。废话不多说,开整。
简单来说,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向的链路的一段成为一个socket。socket通常用来实现客户端和服务端的连接,一个socket由一个ip地址和一个端口号唯一确定。
使用socket进行通讯的一般连接过程:服务端监听某个端口是否有连接请求,客户端向服务端发出连接请求,服务端向客户端发回接收消息这样就建立了一个连接。服务端和客户端都可以通过发送、写入等方法与对方通信。
下面的是一个实现可以被多个客户端访问,当其中一个客户端失去连接,对其他客户端不会产生影响的一个功能。(这就需要ServerSocket不能关闭,并且需要结合多线程来一起调用)
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class Server4 {public static void main(String[] args) {ServerSocket ss = null;// 服务器端try {// 服务器端建立连接,端口号为10000ss = new ServerSocket(10000);// 服务器端不断接受客户端的请求while (true) {Socket s = ss.accept();new Start(s).start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}static class Start extends Thread {Socket s = null;// 客户端InputStream in = null;// 输入流OutputStream out = null;// 输出流BufferedReader reader = null;// 缓冲流PrintStream print = null;// 输出流/** * 有参构造函数 * * @param s */public Start(Socket s) {this.s = s;}@Overridepublic void run() {super.run();try {// 从客户端获取输入流,用于读取客户端数据in = s.getInputStream();// 向客户端写数据out = s.getOutputStream();reader = new BufferedReader(new InputStreamReader(in, "GB2312"));print = new PrintStream(out,true,"GB2312");while (true) {// 客户端不断输入String clientStr = reader.readLine();System.out.println("客户端的字符串:" + clientStr);if (clientStr.trim().equalsIgnoreCase("exit")) {break;}String outputStr = clientStr + ",你好!";print.println(outputStr);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {print.close();reader.close();s.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}运行效果:
如果想实现让多有客户端都能接收到服务端输出的信息,还需要做一下修改(采用集合形式将所有的客户端收集,然后再把信息同一地发送给所有的客户端):
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class Server5 {//用来保存所有的客户端的列表private static List<Socket> sockets = new ArrayList<Socket>();public static void main(String[] args) {new Server5().startServer();}private void startServer() {ServerSocket ss = null;// 服务器端try {// 服务器端建立连接,端口号为10000ss = new ServerSocket(10000);// 服务器端不断接受客户端的请求while (true) {Socket s = ss.accept();sockets.add(s);//启动一个线程new Start(s).start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} class Start extends Thread {Socket s = null;// 客户端InputStream in = null;// 输入流BufferedReader reader = null;// 缓冲流/** * 有参构造函数 * * @param s */public Start(Socket s) {this.s = s;}@Overridepublic void run() {super.run();try {// 从客户端获取输入流,用于读取客户端数据in = s.getInputStream();reader = new BufferedReader(new InputStreamReader(in, "GB2312"));while (true) {// 客户端不断输入String clientStr = reader.readLine();System.out.println("客户端的字符串:" + clientStr);if (clientStr.trim().equalsIgnoreCase("exit")) {break;}String outputStr = clientStr + ",你好!";for (Socket s : sockets) {//向所有的客户端写数据OutputStream out = s.getOutputStream();// 输出流PrintStream print = new PrintStream(out,true,"GB2312");print.println(outputStr);}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {reader.close();s.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
0 0
- Java网络编程上之Socket服务端编程
- Java网络编程之Socket
- JAVA网络编程之Socket
- java网络编程之SOCKET
- java网络编程之Socket
- JAVA--网络编程之服务端和客户端
- java网络编程之socket编程笔记
- Java网络编程之Socket编程
- Java网络编程之Socket编程
- Java网络编程(29):服务端Socket的选项
- java网络编程--socket服务端客户端(1:1)
- 网络编程socket(服务端简单模拟)(OC)
- 网络编程--udp--客户端--服务端--Socket
- java网络编程之socket网络编程示例(服务器端/客户端)
- java网络编程之socket网络编程示例(服务器端/客户端)
- 网络编程之Socket编程
- java网络编程 (客户端、服务端)
- 网络编程之Socket
- HashTable
- iOS-数据持久化
- Android popupWindow设置背景透明度无效问题
- Android系统修改汇总(MTK)
- 第二章 一切都是对象
- Java网络编程上之Socket服务端编程
- SAP smortforms 新建页格式
- mysql中如何改变字段或者列的顺序
- select
- HashSet
- ImageView ImageView随手势变化 动态缩放
- 懒虫小鑫
- 第三章 操作符
- Redis简介及环境搭建(Windows和CentOS)