java编程socket套接字网络编程.docx

上传人:b****1 文档编号:1996459 上传时间:2023-05-02 格式:DOCX 页数:15 大小:18.94KB
下载 相关 举报
java编程socket套接字网络编程.docx_第1页
第1页 / 共15页
java编程socket套接字网络编程.docx_第2页
第2页 / 共15页
java编程socket套接字网络编程.docx_第3页
第3页 / 共15页
java编程socket套接字网络编程.docx_第4页
第4页 / 共15页
java编程socket套接字网络编程.docx_第5页
第5页 / 共15页
java编程socket套接字网络编程.docx_第6页
第6页 / 共15页
java编程socket套接字网络编程.docx_第7页
第7页 / 共15页
java编程socket套接字网络编程.docx_第8页
第8页 / 共15页
java编程socket套接字网络编程.docx_第9页
第9页 / 共15页
java编程socket套接字网络编程.docx_第10页
第10页 / 共15页
java编程socket套接字网络编程.docx_第11页
第11页 / 共15页
java编程socket套接字网络编程.docx_第12页
第12页 / 共15页
java编程socket套接字网络编程.docx_第13页
第13页 / 共15页
java编程socket套接字网络编程.docx_第14页
第14页 / 共15页
java编程socket套接字网络编程.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java编程socket套接字网络编程.docx

《java编程socket套接字网络编程.docx》由会员分享,可在线阅读,更多相关《java编程socket套接字网络编程.docx(15页珍藏版)》请在冰点文库上搜索。

java编程socket套接字网络编程.docx

java编程socket套接字网络编程

java编程_socket_套接字_网络编程

2012-04-2908:

43:

27    我来说两句 

收藏  我要投稿  [字体:

小大]

实现原理:

============================================================ 

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,

在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),

等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

 

============================================================ 

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,

关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

============================================================ 

服务器端代码:

 

 1packagecom.b510.socket1703;

 2

 3importjava.io.*;

 4import.Socket;

 5import.ServerSocket;

 6

 7/**

 8 *服务器断的工作就是在指定的端口上监听

 9 *

  • 建立连接
  • 10 *

  • 打开输出流
  • 11 *

  • 封装输出流
  • 12 *

  • 向客户端发送数据
  • 13 *

  • 关闭打开的输出流
  • 14 *

  • 关闭打开的socket对象
  • 15 *

    16 *@authorHongten

    17 *

    18 *@time2012-4-29 2012

    19 */

    20publicclassTestServer{

    21    publicstaticvoidmain(Stringargs[]){

    22        try{

    23            //指定服务器端的端口号为8888

    24            ServerSockets=newServerSocket(8888);

    25            while(true){

    26                //建立连接

    27                Socketsocket=s.accept();

    28                //打开输出流

    29                OutputStreamos=socket.getOutputStream();

    30                //封装输出流

    31                DataOutputStreamdos=newDataOutputStream(os);

    32                //s

  • .getInetAddress()获取远程ip地址,s
  • .getPort()远程客户端的断后好

    33                //向客户端发送数据

    34                dos.writeUTF("你好,客户端地址信息:

    "+socket.getInetAddress()

    35                        +"\t客户端通信端口号:

    "+socket.getPort());

    36                dos.writeUTF("i'maserver,mynameishongten!

    ");

    37                //关闭打开的输出流

    38                dos.close();

    39                //关闭打开的socket对象

    40                socket.close();

    41            }//开始下一此循环

    42        }catch(IOExceptione){

    43            e.printStackTrace();

    44        }

    45    }

    46}

     

    客户端代码:

     

     1packagecom.b510.socket1703;

     2

     3importjava.io.*;

     4import.Socket;

     5

     6/**

     7 *客户端

     8 *@authorHongten

     9 *

    10 *@time2012-4-292012

    11 */

    12publicclassTestClient{

    13    publicstaticvoidmain(Stringargs[]){

    14        try{

    15            //创建socket对象,指定服务器的ip地址,和服务器监听的端口号

    16            //客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么

    17            //这时候就会找不到服务器,并同时抛出异常==》.ConnectException:

    Connection

    18            //refused:

    connect

    19            Sockets1=newSocket("127.0.0.1",8888);

    20            //打开输入流

    21            InputStreamis=s1.getInputStream();

    22            //封装输入流

    23            DataInputStreamdis=newDataInputStream(is);

    24            //打印服务器端发送过来的信息

    25            System.out.println(dis.readUTF());

    26            System.out.println(dis.readUTF());

    27            //关闭输入流

    28            dis.close();

    29            //关闭打开的socket对象

    30            s1.close();

    31        }catch(IOExceptione){

    32            e.printStackTrace();

    33        }

    34    }

    35}

     

    如果服务器端没有打开,这时候运行客户端,出现的结果:

     

     1.ConnectException:

    Connectionrefused:

    connect

     2    at.PlainSocketImpl.socketConnect(NativeMethod)

     3    at.PlainSocketImpl.doConnect(PlainSocketImpl.java:

    333)

     4    at.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:

    195)

     5    at.PlainSocketImpl.connect(PlainSocketImpl.java:

    182)

     6    at.SocksSocketImpl.connect(SocksSocketImpl.java:

    366)

     7    at.Socket.connect(Socket.java:

    518)

     8    at.Socket.connect(Socket.java:

    468)

     9    at.Socket.(Socket.java:

    365)

    10    at.Socket.(Socket.java:

    179)

    11    atcom.b510.socket1703.TestClient.main(TestClient.java:

    19)

     

    如果服务器端先打开服务,这时候客户端连接服务器端,出现的效果:

    1你好,客户端地址信息:

    /127.0.0.1   客户端通信端口号:

    2800

    2i'maserver,mynameishongten!

    ============================================================ 

                                                 2.实现单线程的聊天室

    ============================================================ 

    服务器端代码:

     

     1packagecom.b510.socket1704.simplechatroom;

     2

     3importjava.io.*;

     4import.Socket;

     5import.ServerSocket;

     6import.SocketException;

     7

     8/**

     9 *服务器端程序,在while循环中所执行的动作是:

    10 *听,说,听,说,听,说...

    11 *

    12 *@authorHongten

    13 *

    14 *@time2012-4-292012

    15 */

    16publicclassTestServer{

    17    publicstaticvoidmain(Stringargs[]){

    18        try{

    19            //创建一个socket对象

    20            ServerSockets=newServerSocket(8888);

    21            //socket对象调用accept方法,等待连接请求

    22            Sockets1=s.accept();

    23            //打开输出流

    24            OutputStreamos=s1.getOutputStream();

    25            //封装输出流

    26            DataOutputStreamdos=newDataOutputStream(os);

    27            //打开输入流

    28            InputStreamis=s1.getInputStream();

    29            //封装输入流

    30            DataInputStreamdis=newDataInputStream(is);

    31            //读取键盘输入流

    32            InputStreamReaderisr=newInputStreamReader(System.in);

    33            //封装键盘输入流

    34            BufferedReaderbr=newBufferedReader(isr);

    35

    36            Stringinfo;

    37            while(true){

    38                //接受客户端发送过来的信息

    39                info=dis.readUTF();

    40                //打印接受的信息

    41                System.out.println("对方说:

    "+info);

    42                //如果发现接受的信息为:

    bye,那么就结束对话

    43                if(info.equals("bye"))

    44                    break;

    45                //读取键盘的输入流

    46                info=br.readLine();

    47                //写入到网络连接的另一边,即客户端

    48                dos.writeUTF(info);

    49                //如果服务器自己说:

    bye,也是结束对话

    50                if(info.equals("bye"))

    51                    break;

    52            }

    53            //关闭输入流

    54            dis.close();

    55            //关闭输出流

    56            dos.close();

    57            //关闭socket对象

    58            s1.close();

    59            s.close();

    60        }catch(SocketExceptione){

    61            System.out.println("网络连接异常,程序退出!

    ");

    62        }catch(IOExceptione){

    63            e.printStackTrace();

    64        }

    65    }

    66}

     

     

    客户端代码:

     

     1packagecom.b510.socket1704.simplechatroom;

     2

     3importjava.io.*;

     4import.Socket;

     5import.SocketException;

     6/**

     7 *客户端程序,在while循环中所执行的动作是:

     8 *说,听,说,听,说,听....

     9 *@authorHongten

    10 *

    11 *@time2012-4-29 2012

    12 */

    13publicclassTestClient{

    14    publicstaticvoidmain(Stringargs[]){

    15        try{

    16            //创建socket对象,指定服务器的ip地址,和服务器监听的端口号

    17            //客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么

    18            //这时候就会找不到服务器,并同时抛出异常==》.ConnectException:

    Connection

    19            //refused:

    connect

    20            Sockets1=newSocket("localhost",8888);

    21            //打开输出流

    22            OutputStreamos=s1.getOutputStream();

    23            //封装输出流

    24            DataOutputStreamdos=newDataOutputStream(os);

    25            //打开输入流

    26            InputStreamis=s1.getInputStream();

    27            //封装输入流

    28            DataInputStreamdis=newDataInputStream(is);

    29            //读取键盘输入流

    30            InputStreamReaderisr=newInputStreamReader(System.in);

    31            //封装键盘输入流

    32            BufferedReaderbr=newBufferedReader(isr);

    33

    34            Stringinfo;

    35            while(true){

    36                //客户端先读取键盘输入信息

    37                info=br.readLine();

    38                //把他写入到服务器方

    39                dos.writeUTF(info);

    40                //如果客户端自己说:

    bye,即结束对话

    41                if(info.equals("bye"))

    42                    break;

    43                //接受服务器端信息

    44                info=dis.readUTF();

    45                //打印

    46                System.out.println("对方说:

    "+info);

    47                if(info.equals("bye"))

    48                    break;

    49            }

    50            //关闭相应的输入流,输出流,socket对象

    51            dis.close();

    52            dos.close();

    53            s1.close();

    54        }catch(IOExceptione){

    55            e.printStackTrace();

    56        }

    57    }

    58}

     

    运行效果:

    服务器端效果>>>

     

    1对方说:

    hell

    2你好

    3对方说:

    嘿嘿

    4你今天

    5对方说:

    13

    6代售点

     

    客户端端效果>>>

     

    1hell

    2对方说:

    你好

    3嘿嘿

    4对方说:

    你今�?

    513

    6对方说:

    代售�?

     

    当前的程序不管是服务器端,还是客户端,都是单线程的。

    如:

    服务器端说:

    "你好"

    1//读取键盘的输入流

    2info=br.readLine();

    3//写入到网络连接的另一边,即客户端

    4dos.writeUTF(info);

    5//如果服务器自己说:

    bye,也是结束对话

    通过上面的代码,把"你好"发送出去了,这时候,程序又开始循环,运行到:

    1//接受客户端发送过来的信息

    2info=dis.readUTF();

    这段代码,其实在这里就阻塞在这里了。

    要等到客户端那边说了话,"嘿嘿",这时候这里的

    阻塞才会变为非阻塞状态,然后又继续说,说完后又继续阻塞......

    而对于客户端来说,其实是一样的道理,客户端说完"hello"后,进入:

    1//接受服务器端信息

    2info=dis.readUTF();

    到收听服务器端的信息,在这里也产生了阻塞,只有服务器端说了"你好",这个阻塞才变为非阻塞

    状态。

    然后又继续接下来的动作....

    ============================================================ 

                                                 3.实现多线程的聊天室

    ============================================================ 

    服务器端代码:

     

     

     1packagecom.b510.socket1705.freeechatroom;

     2

     3importjava.io.*;

     4import.*;

     5

     6/**

     7 *服务器端程序

     8 *

     9 *@authorHongten

    10 *

    11 *@time2012-4-292012

    12 */

    13publicclassTestServer{

    14    publicstaticvoidmain(Stringargs[]){

    15        try{

    16            //创建一个socket对象

    17            ServerSockets=newServerSocket(8888);

    18            //socket对象调用accept方法,等待连接请求

    19            Sockets1=s.accept();

    20

    21            //=========服务器端,在这里应该先打开输出流,在打开输入流,

    22            //=========因为服务器端执行的操作是先听,再说,听,说,听,说.....

    23

    24            //打开输出流

    25            OutputStreamos=s1.getOutputStream();

    26            //封装输出流

    27            DataOutputStreamdos=newDataOutputStream(os);

    28            //打开输入流

    29            InputStreamis=s1.getInputStream();

    30            //封装输入流

    31            DataInputStreamdis=newDataInputStrea

  • 展开阅读全文
    相关资源
    猜你喜欢
    相关搜索
    资源标签

    当前位置:首页 > 工程科技 > 能源化工

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2