我的笔记(4)之网络编程

1.Java SE的Socket编程

在网络编程中,一共有三类Socket可以使用:SOCK_STREAM、SOCK_DGRAM、SOCK_RAM

SOCK_STREAM:提供一对一U的字节流通信,即TCP编程。(双向通信)

SOCK_DGRAM:提供的是报文服务,即UDP编程。(双向通信)


java.net包中提供了Socket和DatagramSocket两个核心类

Socket类用于面向连接的TCP编程

DatagramSocket类提供了数据报文服务功能,实现UDP编程


服务器端

使用ServerSocket类听过监听端口的功能。其声明如下:

public class ServerSocket extend Object

常用的构造方法:

ServerSocket  (int port) throw IOException

方法:close()关闭服务器,accept()


例子: 通过ServerSocket将客户端输入的数据返回给客户端程序

import java.io.*;

import java.net.*;

public class ServerView{

    public static void main()throws IOException{

        //创建ServerSocket类对象,用来监听端口(port),

        ServerSocket  ss=new  ServerSocket(8888);//8888是一个端口


        //调用ServerSocket类的accept()方法,阻塞服务器进程,当与客户端连接后

        Socket s=ss.accept();


        //调用Socket对象的getInputStream()方法得到输入流

        BufferReader br=new BufferReader(new InputStreamReader(s.getInputStream()));

       // 调用Socket对象的getOutputStream()方法得到输出流

       PrintWriter pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));


      String str="";

      //读取从客户端穿过来的数据并发送到客户端

      while((str=br.readLine())!=null){

             pw.printIn(str);

             pw.fiush();}

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

}}


客户端

使用Socket对象连接服务器,常用构造方法:

public Socket(String host,int port)throw UnknowHostExeception,IOExeception

其中host为服务器的IP或主机名称,port为要访问的服务器程序监听的端口号

步骤如下:

try{

     Socket client=new Socket("location",8888);

}catch(UnknowHostExeception  e){

     System.out.printIn("主机不存在');

}catch(IOExeception  e){

     System.out.printIn("服务器不在或忙');}

//得到一个输入流

try{

    BufferedReader input =new BufferedReader(new InputStreamReader(client.getInputStream()));

    //读取来自客户端的数据流

    String message="";

    while(message=input.readerLine()!=null)

    {//处理数据

      ........

    }catch(IOException e){

     System.out.printIn("数据读取出错:"+e.getMessage());}

}

//得到一个输出流

try{

     PrintWriter output=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

     String message="";

     //从客户端获取数据

     .......

     //输出到服务器

     output.printIn(message);

     output.flush();//将数据发送到服务器端

}catch(IOException e){

     System.out.printIn("数据写入出错:"+e.getMessage());}

}

//关闭输入输出流

try{

    output.close();

    input.close();

    client.close();

}catch(IOEception e){

     System.out.printIn("关闭出错:"+e.getMessage());}

}


多线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值