TCP编程示例(非多线程聊天)

本文介绍了一个简单的Java聊天室程序的设计与实现,包括服务器端和客户端的代码示例。该聊天室采用阻塞IO模型,实现了基本的消息交互功能。

服务器端:

package socket;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.*;
import java.util.Scanner;

public class ChatServer {

	public static void main(String[] args) {
		ServerSocket server = null;
		Socket client = null;
		try {
			server = new ServerSocket(6666);
		} catch (IOException e) {
			System.out.println("Connecting Error!");
			System.exit(-1);
		}
		try {
			client = server.accept();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("Accept Error!");
			System.exit(-1);
		}
		BufferedReader br = null;
		BufferedReader scan = null;
		PrintWriter pw = null;
		String line = null;
		String cMsg = null;
		try {
			br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			scan = new BufferedReader(new InputStreamReader(System.in));
			pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
			cMsg = br.readLine();
			while (!"bye".equalsIgnoreCase(cMsg)) {
				System.out.println("Client:"+cMsg);
				line = scan.readLine();
				pw.println(line);
				pw.flush(); 
				cMsg = br.readLine();
			}
			if("bye".equalsIgnoreCase(cMsg)){
				pw.println("bye");
				pw.flush();
			}
			client.close();
			br.close();
			scan.close();
			pw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

客户端:

package socket;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ChatClient {

	public static void main(String[] args) {
		Socket client = null;
		try {
			client = new Socket("127.0.0.1", 6666);
		} catch (UnknownHostException e) {
			System.out.println("Unknown Host");
			System.exit(-1);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
			BufferedReader scan = new BufferedReader(new InputStreamReader(System.in));
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
			String line = null;
			String sMsg = null;
			while(!"bye".equalsIgnoreCase(sMsg)){
				line = scan.readLine();
				pw.println(line);
				pw.flush();
				sMsg = br.readLine();
				System.out.println("Server:"+sMsg);
			}
			if("bye".equalsIgnoreCase(sMsg)){
				pw.println("bye");
				pw.flush();
			}
			client.close();
			br.close();
			scan.close();
			  pw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

说明:

1. 需要先启动Server,再启动Client,并且由Client先发送信息。

2. Server在启动中,不能再次启动Server 。

3. server.accept(),以及流的读操作都是阻塞的,如果没有客户端连接,或者没有读入到数据,则会一直等待。

4. 使用PrintWriter进行print后,必须flush(),否则读取不到。这是因为flush方法是强制刷新缓冲区。何谓缓冲区呢,就是在你本机器上创建一个空间,这个空间可以让你先放些东西进去,比如你os.println进去的内容,如果你不调用flush,那么println进去的内容就只是留在缓冲区中,而不是进入网络传输通道传输到客户端或者服务器端。

5. 程序是同步式的,即只能Client发送一次信息,Server再发送一次,Client再发送一次......待改进。

6. 程序在cmd下开两个窗口运行效果较好。

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值