java Socket(套接字)及其应用

  Socket可以分为两种:面向连接的Socket通信协议(TCP,Transmission Control Protocol,传输控制协议)和面向无连接的Socket通信协议(UDP,User Dategram protocol,用户数据传输)。任何一个Socket都是由IP地址和端口号唯一确定的。

   下面就是一个Socket应用实例实现哭护短和服务器端的通信。

package lianxi_Socket;

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

/*
 * 服务端
 * 用Socket实现客户端很服务端的通信,要求客户发送数据后能够回显一样的数据。
 * Socket的生命周期:
 * 		打开Socket、使用Socket手法数据和关闭Socket
 * ServerSocket方法:
 * 		public ServerSocket(int port):创建绑定到特定端口的服务器套接字,
 * 									端口 0 在所有空闲端口上创建套接字
 * 
 * 打印流的特点:
 * 		A:只有写数据的,没有读取数据,只能操作目的地,不能操作数据源
 * 		B:可以操作任意类型的数据
 * 		C:如果启动了自动刷新,能共自动刷新
 * 		D:该流是可以直接操作文本文件的
 */
public class Server {
	public static void main(String[] args) {
		
		//创建读数据对象并初始化
		BufferedReader br = null;
		
		//创建写数据对象并初始化,PrintWriter是打印流
		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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}	
	}
}

  

创建一个Client.java的客户端程序:

package lianxi_Socket;

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

/*
 * 	用户端
 * 
 */
public class Client {
	public static void main(String[] args) {
		//创建读数据对象并初始化
		BufferedReader br = null;
				
		//创建写数据对象并初始化,PrintWriter是打印流
		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) {
			e.printStackTrace();
		}finally{
			try {
				br.close();
				pw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
     欢迎大家多多提供有用的相关信息,一起交流。 微笑



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值