Java socket

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”打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值