首页 > 编程语言 >java socket网络编程(多线程技术)

java socket网络编程(多线程技术)

时间:2023-02-23 11:47:42浏览次数:38  
标签:null java socket System try new 多线程 out

Client.java

复制代码
import java.io.*;
import java.net.*;
import java.util.*;
public class Client  {
   public static void main(String args[]) {
      Scanner scanner = new Scanner(System.in);
      Socket mysocket=null;
      DataInputStream in=null;
      DataOutputStream out=null;
      Thread readData ; 
      Read read=null;
      try{  mysocket=new Socket();
            read = new Read();
            readData = new Thread(read);
            System.out.print("输入服务器的IP:");
            String IP = scanner.nextLine();
            System.out.print("输入端口号:");
            int port = scanner.nextInt();
            if(mysocket.isConnected()){}
            else{
              InetAddress  address=InetAddress.getByName(IP);
              InetSocketAddress socketAddress=new InetSocketAddress(address,port);
              mysocket.connect(socketAddress); 
              in =new DataInputStream(mysocket.getInputStream());
              out = new DataOutputStream(mysocket.getOutputStream());
              read.setDataInputStream(in);
              readData.start();
            }
       }
       catch(Exception e) {
            System.out.println("服务器已断开"+e);
       }
       System.out.print("输入园的半径(放弃请输入N):");
       while(scanner.hasNext()) {
           double radius=0; 
           try {
               radius = scanner.nextDouble();
           }
           catch(InputMismatchException exp){
              System.exit(0);
           }   
           try { 
               out.writeDouble(radius);
           }
           catch(Exception e) {}
       } 
   }
}
复制代码

Read.java

复制代码
import java.io.*;
public class Read implements Runnable {
   DataInputStream in;
   public void setDataInputStream(DataInputStream in) {
      this.in = in;
   }
   public void run() {
      double result=0;
      while(true) {
        try{ result=in.readDouble();
             System.out.println("圆的面积:"+result);
             System.out.print("输入园的半径(放弃请输入N):");
        }
        catch(IOException e) { 
             System.out.println("与服务器已断开"+e);
             break;
        }   
      }
   }
}
复制代码

Server.java

复制代码
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
   public static void main(String args[]) {
      ServerSocket server=null;
      ServerThread thread;
      Socket you=null;
      while(true) {
        try{  server=new ServerSocket(2010);
        }
        catch(IOException e1) { 
              System.out.println("正在监听"); //ServerSocket对象不能重复创建
        } 
        try{  System.out.println(" 等待客户呼叫");
              you=server.accept();
              System.out.println("客户的地址:"+you.getInetAddress());
        } 
        catch (IOException e) {
              System.out.println("正在等待客户");
        }
        if(you!=null) { 
              new ServerThread(you).start(); //为每个客户启动一个专门的线程  
        }
      }
   }
}
class ServerThread extends Thread {
   Socket socket;
   DataOutputStream out=null;
   DataInputStream  in=null;
   String s=null;
   ServerThread(Socket t) {
      socket=t;
      try {  out=new DataOutputStream(socket.getOutputStream());
             in=new DataInputStream(socket.getInputStream());
      }
      catch (IOException e){}
   }  
   public void run() {        
      while(true) {
         try{  double r=in.readDouble();//堵塞状态,除非读取到信息
               double area=Math.PI*r*r;
               out.writeDouble(area);
         }
         catch (IOException e) {
               System.out.println("客户离开");
                return;
         }
      }
   } 
}
复制代码

标签:null,java,socket,System,try,new,多线程,out
From: https://www.cnblogs.com/kn-zheng/p/17147369.html

相关文章

  • 熟悉JavaScript闭包
    熟悉JavaScript闭包闭包(closure)是一个函数以及其捆绑的周边环境状态(lexicalenvironment,词法环境)的引用的组合。简而言之,闭包让开发者可以从内部函数访问外部函数的作用......
  • JavaScript 中的 apply、call、bind
    在JavaScript中,apply、call、bind是三个与函数调用相关的方法,它们都允许你在调用函数时手动设置函数的上下文(即this指向)。1、apply方法:apply方法允许你调用一个函......
  • java之线程池
    1.线程池的作用  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时......
  • Java后端培训机构哪个比较好?不了解怎么选
    Java后端培训机构哪个比较好?这样的问题,对于机构的评价每个人都有自己的想法和看法,不能一概而论。所以,小编觉得,我们在看别人推荐的时候也要有自己的判断,通过实地考察在与自......
  • 北京Java培训机构哪家比较好
    北京作为一线互联网发展城市,Java行业整体是很不错的,人才的需求量也非常大,就业前景与薪资待遇也很可观,所以,北京的Java培训相对来说是比较多的,到这里来学习的人也不少,大家都......
  • Java哪里培训好,需要考虑几个情况
    Java哪里培训好,事实上,正规的Java培训还是有不少的,并且不同城市的机构教学水平有这很大差距,这就会导致,最终的学习效果与成果也都存在一定的差距,所以,我们在选择Java培训的时......
  • Java工程师工资一般多少?是否是我们预期的那样呢
    关注互联网的同学想必是了解IT行业的,IT行业的岗位尤其是Java工程师不管是薪资还是待遇都属于行业中比较高的,而大家现在对于Java工程师的预期也是非常高的,那么2023新的一年......
  • Java 在线代码运行编译工具推荐
    Java在线运行编译,是一款可在线编程编辑器,在编辑器上输入Java代码,点击运行,可在线编译运行Java,Java代码在线运行调试,Java在线编译,可快速在线测试您的Java代码,在线编......
  • java使用Calendar加减天、周、月、年
    java.util.Calendar ,提供了计算时间的方式,Calendar.DATE :代表天数Calendar.WEDNESDAY:代表周数Calendar.MONTH:代表月数Calendar.YEAR:代表年数1、计算近一......
  • Mongodb-使用javaDriver 实现增删改查
    1.回顾  上篇已经学习了使用Mongodb_C#Driver实现增删改查2.重点这篇将学习怎样使用和学习Mongodb_javaDriver实现增删改查3.准备篇   在使用的时候请先准......