关闭

java Socket(套接字)及其应用

标签: io流socketjava
421人阅读 评论(0) 收藏 举报
分类:

  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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11688次
    • 积分:412
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:1篇
    • 译文:0篇
    • 评论:5条
    最新评论