`

ava Socket 编程之Socket与ServerSocket

 
阅读更多



Java Socket 编程之Socket与ServerSocket的区别(转)


1.1 ServerSocket类
  
创建一个ServerSocket类,同时在运行该语句的计算机的指定端口处建立一个监听服务,如:
    ServerSocket MyListener=new ServerSocket(600);
    这里指定提供监听服务的端口是600,一台计算机可以同时提供多个服务,这些不同的服务之间通过端口号来区别,不同的端口号上提供不同的服务。为了随时监听可能的Client请求,执行如下的语句:
    Socket LinkSocket=MyListener.accept();
    该语句调用了ServerSocket对象的accept()方法,这个方法的执行将使Server端的程序处于等待状态,程序将一直阻塞直到捕捉到一个来自Client端的请求,并返回一个用于与该Client通信的Socket对象Link-Socket。此后Server程序只要向这个Socket对象读写数据,就可以实现向远端的Client读写数据。结束监听时,关闭ServerSocket对象:
    Mylistener.close();
1.2 Socket类
    当Client程序需要从Server端获取信息及其他服务时,应创建一个Socket对象:
    Socket MySocket=new Socket(“ServerComputerName”,600);
    Socket类的构造函数有两个参数,第一个参数是欲连接到的Server计算机的主机地址,第二个参数是该Server机上提供服务的端口号。
    Socket对象建立成功之后,就可以在Client和Server之间建立一个连接,并通过这个连接在两个端点之间传递数据。利用Socket类的方法getOutputStream()和getInputStream()分别获得向Socket读写数据的输入/输出流,最后将从Server端读取的数据重新返还到Server端。
    当Server和Client端的通信结束时,可以调用Socket类的close()方法关闭Socket,拆除连接。

1. 服务器端程序设计
    在服务器端,利用ServerSocket类的构造函数ServerSocket(int port)创建一个ServerSocket类的对象,port参数传递端口,这个端口就是服务器监听连接请求的端口,如果在这时出现错误将抛出IOException异常对象,否则将创建ServerSocket对象并开始准备接收连接请求。
    服务程序从调用ServerSocket的accept()方法开始,直到连接建立。在建立连接后,accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。
2.客户端程序设计
    当客户程序需要与服务器程序通信时,需在客户机创建一个Socket对象。Socket类有构造函数Socket(InetAddress addr,int port)和Socket(String host,intport),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。对于第一个InetAd-dress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP地址与host参数相一致,那么将抛出UnknownHostException异常对象。两个函数都通过参数port获得服务器的端口号。假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。
    如果创建了一个Socket对象,那么它可通过get-InputStream()方法从服务程序获得输入流读传送来的信息,也可通过调用getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序调用close()方法关闭流和流套接字。



服务器端代码:

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

 

public class Myserver {

//建立ServerSocket,并设置其端口号
    private ServerSocket ss;
  
    public static final int port=8962;
   
    public Myserver(){
   
    try{
   
    ss=new ServerSocket(port);
   
    }catch(IOException e){
   
    e.printStackTrace();
    }
   
    }
    public void setConnection() throws IOException{
   //建立服务器端的Socket
    Socket s;
    OutputStream os;
    try{ //ServerSocke.accept()t返回一个Socket对象

    s=ss.accept();
    os=s.getOutputStream();
    os.write("hello".getBytes());
    os.close();
    s.close();
    }catch(IOException e){
   
    e.printStackTrace();
    }
   
    }

    public static void main(String[] args) throws IOException {
   
    Myserver ms=new Myserver();
    ms.setConnection();
  
}

}

 客户端代码:

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

 

public class Myclient {
      public static final String IP="172.16.221.134";
      public static final int port=8962;
      private Socket s;

      public Myclient() throws IOException{
try{
   s=new Socket(IP,port);

}catch(IOException e){
  
   e.printStackTrace();
}
      }
     
      public void setConnection()throws IOException{
      
       InputStream is;
      
    try{
    is=s.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
   
    System.out.println(br.readLine());
   
    }catch(IOException e){
   
    e.printStackTrace();
    }  
      
     
      }
public static void main(String args[]) throws IOException{
  
   Myclient mc=new Myclient();
   mc.setConnection();
  
}
}

 

 

分享到:
评论

相关推荐

    利用java的socket通信,swing组件,access数据库实现的网吧购物系统,本文件为客户端源码

    在Java中,`java.net.Socket` 类和 `ServerSocket` 类是实现这一功能的核心。客户端通过创建Socket实例连接到服务器的特定端口,然后通过输入输出流进行数据传输。在网吧购物系统中,客户端可能发送用户的购买请求到...

    java 聊天室 socket 肯定能运行的

    1. **ServerSocket与Socket**:服务器端使用ServerSocket监听特定端口,等待客户端的连接请求。当客户端连接成功后,会创建一个Socket实例,通过这个Socket进行数据传输。 2. **多线程处理**:由于聊天室需要同时...

    ava实战项目--个人资产管理系统

    "javase"目录很可能包含了项目的Java基础代码,涵盖了基础的Java SE(标准版)开发,如Java Swing或JavaFX用于构建GUI,以及Java网络通信API,如Socket和ServerSocket,用于客户端和服务器之间的通信。 在个人资产...

    远程桌面控制j(ava程序)

    这个程序可能利用了Java的Socket编程来建立客户端与服务器之间的通信通道,通过TCP/IP协议传输数据。在Java中,Socket类和ServerSocket类是实现网络通信的基础,它们分别用于客户端和服务器端的连接。 远程桌面控制...

    可以实现群聊和私聊的j2se聊天室项目

    在Java中,可以使用Socket编程来创建客户端和服务器端的连接,通过ServerSocket监听客户端的连接请求,而Socket则用于建立客户端到服务器的连接。多线程技术在这里也非常重要,因为服务器需要同时处理多个客户端的...

    J面试-AVA核心知识点整理.pdf

    传统的IO模型,如FileInputStream/FileOutputStream,Socket/ServerSocket等都是基于阻塞IO模型的。在读写过程中,如果数据没有准备好,就会导致线程阻塞。 **4.2 非阻塞IO模型** 非阻塞IO模型下,用户线程发起IO...

    解析java程序设计参考答案

    11. **网络编程**:Java提供了丰富的API进行网络编程,如Socket和ServerSocket类。读者将学习如何建立客户端和服务器端的连接,发送和接收数据。 12. **反射与注解**:反射机制允许程序在运行时动态地获取类的信息...

    中科大Java下中科大Java下

    8. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,可用于创建客户端和服务器应用程序。 9. **Swing与JavaFX**:这两个是Java的图形用户界面(GUI)库,可以用来构建桌面应用。 10. **反射与注解**...

    Java基础案例教程(第2版)-课后习题答案.zip

    12. **网络编程**:Java提供了Socket和ServerSocket类进行客户端和服务器端的通信。 通过解压并研究"54747Java基础案例教程(第2版)-原书案例"中的源代码,学习者可以深入理解每个知识点的实际应用,提高编程技能...

    javagram:使用Swing用J​​ava编写的Messenger应用程序

    - 在Messenger应用中,通常会使用Socket编程来实现客户端与服务器之间的通信。Java的`java.net`包提供了`Socket`和`ServerSocket`类,用于建立TCP连接。 - 数据传输可能使用JSON或XML格式,通过`java.io`包进行...

Global site tag (gtag.js) - Google Analytics