锁定老帖子 主题: corejava辅导(14--3)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-03
TCP Socket
TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。 1) 服务器分配一个端口号,服务器使用accept()方法等待客户端的信号,信号一到打开socket连接,从socket中取得OutputStream和InputStream。 2) 客户端提供主机地址和端口号使用socket端口建立连接,得到OutputStream和InputStream。 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();
}
}
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 979 次