`

TCP程序设计(单线程服务器和多线程服务器学习)

    博客分类:
  • J2EE
阅读更多

/********下面是单线程服务器的服务器端*********/

package serverSocket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/***
* TCP程序设计:
* java中使用套接字完成TCP程序的开发,特点:可靠、双向、持续、点对点
* 对java的网络程序来说,每一个客户端都是一个socket对象;
* serverSocket编程服务器端:
* 注意:该为单线程服务器,即一个客户连接进入之后,其他客户只能在等待,连接不进去的.
* 注意:该种服务器设置,不适合聊天软件的开发,因为必须等待连接进入,会占用大量资源.
* @author Administrator
*
*/
public class EchoServer {
public static void main(String[] args) throws Exception{
ServerSocket server = null;
Socket client = null;
PrintStream out = null;
BufferedReader buf = null;
server = new ServerSocket(8888);
while(true){
System.out.println("服务器运行,等待客户连接中......");
client = server.accept();//排队等待客户端接入
buf = new BufferedReader(
new InputStreamReader(client.getInputStream()));
out = new PrintStream(client.getOutputStream());

boolean flag = true;
while(flag){
String str = buf.readLine();
if(str == null || "".equals(str)){
flag = false;
}else{
if("bye".equals(str)){
flag = false;
}else{
out.println("ECHO: " + str);
}
}
}
buf.close();
out.close();
client.close();
}
}
}


/********下面是单线程服务器的客户端*********/

package serverSocket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/***
* socket通信客户端:
* 关键:
* 1、input:控制台输入流,
* 2、out:向服务器输出流,
* 3、buf:读取返回信息流
* @author Administrator
*
*/
public class EchoClient {
public static void main(String[] args) throws Exception{
Socket client = null;
client = new Socket("localhost",8888);//连接编程,
BufferedReader buf = null;
PrintStream out = null;
BufferedReader input = null;

input = new BufferedReader(//输入流:接受从控制台输入的信息,
new InputStreamReader(System.in));
out = new PrintStream(client.getOutputStream());//输出流:打开向服务器输出的流
buf = new BufferedReader(//输入流:接受从服务器返回的信息,
new InputStreamReader(client.getInputStream()));

boolean flag = true;
while(flag){
System.out.println("输入信息: ");
String line = input.readLine();
out.println(line);
if("bye".equals(line)){
flag = false;
}else{
String echo = buf.readLine();//获取服务器返回信息,
System.out.println(echo);
}
}
client.close();
buf.close();
out.close();
input.close();
}
}


/********下面是多线程服务器测试*********/

package serverSocket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/***
* 多线程服务器:
* 原理:每当接入一客户,就另起一线程,将回复信息的任务交给了线程处理,
* 注意:该种服务器设置,不适合聊天软件的开发,因为必须等待连接进入,会占用大量资源.
* @author Administrator
*
*/
public class EchoThreadServer {
public static void main(String[] args)throws Exception {
ServerSocket server = null;
Socket client = null;
server = new ServerSocket(8888);
boolean flag = true;
while(flag){
System.out.println("服务器正在运行,等待客户连接......");
client = server.accept();
new Thread(new EchoThread(client)).start();
//server.close();
}
}
}
/***
* 每一客户接入,都新创建一线程,打开输入流,输出流,处理信息
* @author Administrator
*
*/
class EchoThread implements Runnable{
private Socket client = null;
public EchoThread(Socket client) {
this.client = client;
}
@Override
public void run(){
PrintStream out = null;
BufferedReader buf = null;

try {
out = new PrintStream(client.getOutputStream());//打开输出流
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));//打开输入流

boolean flag = true;
while(flag){
String line = buf.readLine();
if(line == null || "".equals(line)){
flag = false;
}else{
if("bye".equals(line)){
flag = false;
}else{
out.println("Echo: " + line);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
out.close();
buf.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
*******************************************************经测试通过,只为交流学习************************

分享到:
评论
1 楼 beyond0851 2013-01-27  
[b][/b]

相关推荐

    java 多线程设计模式 进程详解

    《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...

    用TCP-IP进行网际互联(全三卷)-含代码

    与《TCP/IP详解》齐名的一套书。 第1章 引言和概述 第2章 客户-服务器模型与软件设计 第3章 客户-服务器软件中...第13章 单线程、并发服务器(TCP) 第14章 多协议服务器(TCP,UDP) 第15章 多服务服务器(TCP,UDP)

    基于Qt的多线程流水线异步服务器稳定版

    数据库被作为资源管理,支持在多线程的条件下,使用数据库资源。 5、 框架界面。尽管常见的服务运行时表现为一个后台进程,但为了更好的演示服务器的功能,避免繁琐的配置,还是需要一个图形界面来显示状态、设置...

    山东科技大学-计算机科学与工程学院-网络程序设计-实验报告

    实验项目名称 实验一 TCP、UDP 网络编程 实验日期 ...实验项目名称 实验四 利用多进程和多线程实现服务器端的并发处理 实验日期 2021.4.19 实验项目名称 实验五 I/O 复用完成单线程并发服务器的处理 实验日期 2021.4.26

    局域网信息发布程序的设计与实现VC+SQL

    对于一般采用TCP/IP协议的应用程序只实现了单用户与服务器间点对点的连接,而本文在VC6.0的环境下,运用了多线程以及共享数据结构技术,不仅实现了多用户与服务器间的连接,而且解决了多用户间信息交换问题

    C++_p2p实现多线程文件传输

    笔者一直想寻求一种简 单有效,且具备多线程断点续传的方法来实现点与点之间的文件传送问题,经过大量的翻阅资料与测试,终于实现了,现把它共享出来,与大家分享。 我写了一个以此为基础的实用程序(网络传圣,包含...

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    java socket通信 一对多

    1)设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 2)服务端程序能响应单个或任意多个客户端...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     15.3.3 多进程的并发服务器和多线程的并发服务器  15.3.4 客户端进程的多线程化  本章小结 第十六章 网络售票系统的简单模拟  16.1 系统的总体设计  16.1.1 应用的说明  16.1.2 数据格式的...

    java应用软件程序设计

    195 第6章 Java C/S结构编程 197 实例67 实现C/S多线程 198 实例68 客户端程序 200 实例69 服务器端程序 201 实例70 C/S结构聊天室 203 实例71 基于C/S的小游戏 209 实例72 应用C/S数据库 237...

    nginx v1.5.9 for windows

    2 增加wsa网络IO模型(Windows socket异步IO模型) 该模型支持WEB服务器 反向代理服务器和SSL安全连接 与Linux下的epoll具有同等的功能和效率 3 增加Windows和Linux平台下的多线程支持(Unix下尚未实现) 多线程...

    IIS6.0 IIS,互联网信息服务

     第二篇 IIS之FTP服务器 一、建立你的FTP站点 第一个FTP站点(即“默认FTP站点”)的设置方法和更多FTP站点的建立方法请参照前文Web服务器中相关操作执行。需要注意的是,如果你要用一个IP地址对应多个不同的FTP...

Global site tag (gtag.js) - Google Analytics