java多线程TCP与单线程TCP编程的结果演示

/**
*以下是TCP编程中多线程服务端
*/


import java.net.ServerSocket;
import java.net.Socket;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class TCPServerA
{
public static void main(String[] args) throws Exception{
//创建套接字
ServerSocket ss=new ServerSocket(9999);
//接收客户端请求
Socket s=null;
while((s=ss.accept())!=null){

//返回套接字之后调用IO线程
new Test(s).start();
}
ss.close();
}
}




class Test extends Thread
{
private Socket s;
public Test(Socket socket){
super();
this.s=socket;
}
public void run(){
try{

//向客户端打印服务端本地时间
OutputStream os=s.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
pw.println("now time:"+new Date());
//测试接收客户端数据,加10秒暂停,再输出客户端发来的数据,便于观察
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(br.readLine());

pw.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}

}





/**
*以下是TCP编程中单线程服务端
*/


import java.net.ServerSocket;
import java.net.Socket;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class TCPServer
{
public static void main(String[] args) throws Exception{
//创建套接字
ServerSocket ss=new ServerSocket(9999);
//接收客户端请求
Socket s=null;
while((s=ss.accept())!=null){
OutputStream os=s.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
pw.println("now time:"+new Date());
//测试接收客户端数据,加10秒暂停,再输出客户端发来的数据,便于观察
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(br.readLine());

pw.close();
s.close();
}
ss.close();
}
}




/**

*以下是TCP编程中客户端代码

*/


import java.io.*;

import java.net.*;


public class TCPClientA
{
public static void main(String[] args) throws Exception{

//创建套接字,指明目的服务端和服务端端口号
Socket s=new Socket(InetAddress.getByName("127.0.0.1"),9999);

//打印从服务端接收来的数据
InputStream is=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String str=br.readLine();
System.out.println(str);

//向服务端发送数据
OutputStream os=s.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
pw.println("我是客户端");
br.close();
s.close();

}


}




演示过程:

运行多线程服务端加客户端版本:

dos窗口java TCPServerA,开启ServerA等待接收套接字响应,然后新建两个dos窗口,都运行

java TCPClientA,观察两者打印服务端时间是同步的,等待10秒是同步的,最后服务端打印“我是客户端”也是同步的

运行单线程服务端加客户端版本:

同样开三个dos窗口,先开启服务端,运行后发现,第二个请求连接的客户端必须等到第一个打印完时间、等待10秒、

服务端打印这三步才会开始打印时间···等,也就是必须等到第一个客户端请求完全结束,关闭之后才可以与服务端连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值