码迷,mamicode.com
首页 > 编程语言 > 详细

java中的socket编程

时间:2015-04-11 14:57:05      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:java   多线程synchronized   


1、socket服务端

package com.socket.project;

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

public class Service {

	
	public static void main(String[] args) {
		
		Socket socket=null;
		InputStream is=null;
		InputStreamReader isread=null;
		BufferedReader red=null;
		try {
			
			//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			ServerSocket server=new ServerSocket(8089);
			
			System.out.println("服务器启动监听。。。。。。");
			//监听端口
			while(true){
				socket=server.accept();
				//获取输入流
				 is=socket.getInputStream();
				 isread=new InputStreamReader(is);
				//创建缓冲区
				 red=new BufferedReader(isread);
				String data=null;
				while((data=red.readLine())!=null){
					System.out.println("客户端上传的数据是:"+data);
				}
			}
		 
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(red!=null)
				try {
					red.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			if(isread!=null)
				try {
					isread.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			if(is!=null)
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}
}
2、客户端

package com.socket.project;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient {
	//socket 客户端
	public static void main(String[] args) {
		OutputStream out=null;
		PrintWriter writer=null;
		try {
			//创建客户端socket 传递的 地址  端口
			Socket sock=new Socket("localhost", 8089);
			 out=sock.getOutputStream();//字节流 
			 writer=new PrintWriter(out);//将字节流转换打印流
			 
			 writer.print("我想告诉你,我一直在这里等着你");
			 writer.flush();
			 //关闭socket输出流
			 sock.shutdownOutput();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			//关闭流
			if(writer!=null)writer.close();
			if(out!=null)
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}	
	}	
}

多线程编程

package com.socket.thread;

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


public class SocketClient {
	//socket 客户端
	public static void main(String[] args) {
		OutputStream out=null;
		PrintWriter writer=null;
		InputStream input=null;
		InputStreamReader read=null;
		BufferedReader red=null;
		Socket sock=null;
		try {
			//创建客户端socket 传递的 地址  端口
			 sock=new Socket("localhost", 8089);
			 out=sock.getOutputStream();//字节流 
			 writer=new PrintWriter(out);//将字节流转换打印流
			 
			 writer.print("我想告诉你,我一直在这里等着你");
			 writer.flush();
			 //关闭socket输出流
			 sock.shutdownOutput();
			
			 //获取服务端返回的信息
			 input =sock.getInputStream();//获取输入流
			 read=new InputStreamReader(input);
			 red=new BufferedReader(read);
			 String data="";
			 while((data=red.readLine())!=null){
				System.out.println("服务端回复你:"+data); 
			 }
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			//关闭流
			if(writer!=null)writer.close();
			if(out!=null)
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
				if(red!=null)
					try {
						red.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				if(read!=null)
					try {
						read.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				
				if(input!=null)
					try {
						input.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				
				if(sock!=null)
					try {
						sock.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				
		}
		
	}
	
	
}

package com.socket.thread;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Service {

	
	public static void main(String[] args) {
		
		
		//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
		try {
			ServerSocket serverSocket=new ServerSocket(8089);
			
			Socket socket=null;
			while(true){//一直监听
				socket=serverSocket.accept();
				//启动一个服务
				SocketServiceThread thread=new SocketServiceThread(socket);
				thread.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
}

package com.socket.thread;

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

public class SocketServiceThread extends Thread {

	private Socket socket=null;
	public SocketServiceThread(Socket socket){
		this.socket=socket;
	}

	//执行线程操作
	@Override
	public void run() {

		InputStream input=null;
		InputStreamReader red=null;
		BufferedReader  br=null;
		OutputStream out=null;
		PrintWriter writer=null;
		try {
			//获取输入流
			input=socket.getInputStream();
			red=new InputStreamReader(input);
			//缓冲字符
			br=new BufferedReader(red);
			String data="";
			while((data=br.readLine())!=null){
				
				System.out.println("客户端来信说:"+data);
			}
			//关闭写入流
			socket.shutdownInput();
			//获取输出流
			out=socket.getOutputStream();// 获取输出字节流
			writer=new PrintWriter(out);//将字节转换打印流
			writer.write("欢迎光临!!");
			writer.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
		if(br!=null)
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if(red!=null)
			try {
				red.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		if(input!=null)
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			if(writer!=null)writer.close();
			if(out!=null)
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
		}
	
	}
	

}


java中的socket编程

标签:java   多线程synchronized   

原文地址:http://blog.csdn.net/itlqi/article/details/44994625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!