论坛首页 入门技术论坛

corejava辅导(14--3)

浏览 981 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-03  

TCP Socket

 

TCPTranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

   1) 服务器分配一个端口号,服务器使用accept()方法等待客户端的信号,信号一到打开socket连接,从socket中取得OutputStreamInputStream

   2) 客户端提供主机地址和端口号使用socket端口建立连接,得到OutputStreamInputStream

TCP/IP的传输层协议

 

      

 

建立TCP服务器端

 

一般,我们把服务器端写成是分发Socket的,也就是总是在运行,

创建一个TCP服务器端程序的步骤:

   

    1). 创建一个ServerSocket

    2). ServerSocket接受客户连接请求

    3). 创建一个服务线程处理新的连接

    4). 在服务线程中,从socket中获得I/O

    5). I/O流进行读写操作,完成与客户的交互

    6). 关闭I/O

    7). 关闭Socket

ServerSocket server = new ServerSocket(post)

Socket connection = server.accept();

ObjectInputStream put=new ObjectInputStream(connection.getInputStream());

ObjectOutputStreamo put=newObjectOutputStream(connection.getOutputStream());   

处理输入和输出流;

关闭流和socket

典型的服务器端。

public class Server1 {

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

         ServerSocket ss=new ServerSocket(9000);

         while(true){

              Socket s=ss.accept();//获得一个Socket对象。

              Thread t=new Thread1(s);//分发Socket

              t.start();

         }

     }

}

class Thread1 extends Thread{

     Socket s;

     public Thread1(Socket s){

         this.s=s;

     }

     public void run(){

         try {

              OutputStream o=s.getOutputStream();

              PrintWriter out=new PrintWriter(o);

              out.println("Hello Client");

              out.flush();

              s.close();

         } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

         }        

     }

}

建立TCP客户端

 

创建一个TCP客户端程序的步骤:

 

    1).创建Socket

    2). 获得I/O

    3). I/O流进行读写操作

    4). 关闭I/O

    5). 关闭Socket

Socket connection = new Socket(127.0.0.1, 7777);

ObjectInputStream input=new ObjectInputStream(connection.getInputStream());

ObjectOutputStream utput=new ObjectOutputStream(connection.getOutputStream());

处理输入和输出流;

关闭流和socket

例:

服务器端:

import java.net.*;

import java.io.*;

public class Server1 {

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

         ServerSocket ss=new ServerSocket(9000);

         while(true){

              Socket s=ss.accept();

              Thread t=new Thread1(s); //为每个线程分配的Socket

              t.start();

         }

     }

}

class Thread1 extends Thread{

     Socket s;  

public Thread1(Socket s){

         this.s=s;

     }

     public void run(){

         try {

              OutputStream o=s.getOutputStream();

              PrintWriter out=new PrintWriter(o);

              out.println("Hello Client");

              out.flush();

              s.close();

         } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

         }        

     }

}

 

客户端:

import java.net.*;

import java.io.*;

public class Client1 {

 

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

         Socket s=new Socket("127.0.0.1",9000);

         InputStream i=s.getInputStream();

         InputStreamReader ir=new InputStreamReader(i);

         BufferedReader in=new BufferedReader(ir);

         String str=in.readLine();

         System.out.println(str);

         s.close();

 

     }

 

}

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics