Socket 点对面 通信

本文介绍了一种基于Socket的点对面通信方式,通过服务器监听客户端连接请求,并为每个客户端创建独立的处理线程,实现了多客户端并发通信。文章提供了完整的Java代码示例。
Socket 点对面 通信
创建多客户连接的socket通信的方式,是在服务器端创建客户连接请求的监听线程,一旦客户发起请求,则服务器端用户创建和此客户端通信线程的和Socket,服务器把此客户端的通信交给此线程进行处理.同时继续在服务器的指定端口进行监听,来响应其他客户端的请求.


//TextFaceServer.java
  

package com.itheima.net.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 点对面 server
*/

//操作Socket服务器端的类
public class TextFaceServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
new FaceServer(8080);
} catch (Exception e) {
System.out.println("服务器端进行端口监听出现异常:"+e.getMessage());
}
}

}


class FaceServer extends ServerSocket{

private int port; //端口号
public FaceServer(int port) throws IOException {
super(port);
this.port=port;
System.out.println("服务器已启动,监听端口为:"+port);
System.out.println("正在等待客户端的连接.....");
try {
while (true) {
Socket socketCon=accept();
new ServerThread(socketCon,port);
}
} catch (Exception e) {
System.out.println("没有监听到客户端的信息.....");
}finally{
close();
}

}
}

//继承线程类 实现 服务器线程
class ServerThread extends Thread{
private int port; //端口
private Socket socketCon; //获得连接对象

private BufferedReader in;
private PrintWriter out;
public ServerThread(Socket socketCon,int port) throws Exception {
this.port = port;
this.socketCon = socketCon;
//获取客户端的数据流
in=new BufferedReader(new InputStreamReader(this.socketCon.getInputStream(),"gb2312"));
//获取写往客户端的数据输出流,true表示自动刷新
out=new PrintWriter(socketCon.getOutputStream(),true);
//向客户端发送连接信息
out.println("服务器端连接成功.....");
out.println("输入exit断开与服务器的连接");
start(); //启动线程
}

//处理信息的方法
public String infoUpperString(String line){
return line.toUpperCase();
}

//线程的run方法
public void run(){
try {
boolean done=false;
while (!done) {
String line=in.readLine(); // 读取客户端的每行信息
if(line==null){
done=true;
}else{
System.out.println("客户端传来的内容:"+line);
String message=infoUpperString(line);

out.println("从服务器端口发送的内容:"+message);
if(line.trim().equals("exit"))
done=true;
}
}
System.out.println("客户端终止发送信息......");
socketCon.close(); //关闭通信资源
}catch (Exception e) {
System.out.println("启动服务器端出现错误:"+e.getMessage());
}
}

}


//TextPointClient.java

package com.itheima.net.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

/**
* 点对面 client
* @author Bin
*
*/
public class TextPointClient {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
new PointClient("localhost",8080);
} catch (Exception e) {
System.out.println("测试客户端连接错误:"+e.getMessage());
}
}

}


class PointClient{ //Socket点客户端
private String host; //Ip地址 或者域名
private int port; //端口
public PointClient(String host, int port) {
this.host = host;
this.port = port;
connectionSocket();
}

//连接的方法
public void connectionSocket(){
try {
Socket socketConn;

if(host.equals("localhost") || host.equals("127.0.0.1")){ //创建本地连接
socketConn=new Socket(InetAddress.getLocalHost(),port);
}else{
socketConn=new Socket(InetAddress.getByName(host),port); //创建远程连接
}

//获得从键盘的输入流
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));

//获得服务器内容的数据流
PrintWriter out=new PrintWriter(socketConn.getOutputStream(),true);

//获得服务器端发送内容的缓冲流
BufferedReader in=new BufferedReader(new InputStreamReader(socketConn.getInputStream()));

System.out.println("服务器信息:"+in.readLine()); //从服务器端获取信息
System.out.println("服务器信息:"+in.readLine());
System.out.print("请输入>");
boolean done=false;
while(!done){
String line=stdin.readLine(); //获得从键盘输入的每行字符
out.println(line); //发送到服务器端
if(line.equalsIgnoreCase("exit"))
done=true;
String info=in.readLine();
System.out.println("服务器信息:"+info);
if(!done)
System.out.println("请输入>");
}
socketConn.close();
} catch (SecurityException e) {
System.out.println("连接服务器出现安全问题:"+e.getMessage());
}catch (Exception e) {
System.out.println("连接服务器出现I/O错误:"+e.getMessage());
}
}


}

本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值