Java socket

来源:互联网 发布:飞客数据恢复 编辑:程序博客网 时间:2024/06/07 20:31

socket套用字:
1>面向连接的socket通信协议TCP
2>面向无连接的socket通信协议UDP

socket由IP地址和端口号唯一确定。

socket的生命周期:
1>打开socket
2>使用socket收发数据
3>关闭socket

TCP通信过程:
1>server(服务器)端Listen(监听)指定的某个端口是否有连接请求
2>client(客户)端向server端口发出connect请求
3>server端向client端发回accept消息

例题:用socket实现客户端和服务器端的通信,要求客户发送数据后能够回显相同的数据。
第一步:首先创建一个名为server.java的服务器端代码:
package java_test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class Server {

public static void main(String[] args) {    // TODO Auto-generated method stub    BufferedReader br=null;    PrintWriter pw=null;    try {        ServerSocket server=new ServerSocket(2000);        Socket socket=server.accept();//获取输入流        br=new BufferedReader(new InputStreamReader(socket.getInputStream()));//获取输出流        pw=new PrintWriter(socket.getOutputStream(),true);        String s=br.readLine();//获取接受的数据        pw.println(s);//发送相同的数据给客户端     } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    }finally{        try{            br.close();            pw.close();    }catch(Exception e){    }}}

}

第二步:创建一个client.java的客户端程序:
package java_test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

class Client {

public static void main(String[] args) {    // TODO Auto-generated method stub    BufferedReader br=null;    PrintWriter pw=null;    try {        Socket socket=new Socket("localhost",2000);//获取输入流和输出流        br=new BufferedReader(new InputStreamReader(socket.getInputStream()));        pw=new PrintWriter(socket.getOutputStream(),true);//向服务器发送数据        pw.println("Hello");        String s=null;        while(true){            s=br.readLine();            if(s!=null)                break;        }        System.out.println(s);    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    }finally{        try{            br.close();            pw.close();        }catch(Exception e){        }        }    }}

第三步:最后启动服务器端程序,然后运行客户端程序,客户端将会把从服务器端转发过来的“hello”打印出来。

0 0
原创粉丝点击