当前位置:首页 > 开发 > 编程语言 > 网络编程 > 正文

java通信之Socket通信基础

发表于: 2011-06-21   作者:白糖_   来源:转载   浏览:
摘要: 正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤: ①创建Socket; ②打开连接到Socket的输入输出流; ④按照一定的协议对Socket进行读写操作; ④关闭Socket。   Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待soc

正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤:

①创建Socket;

②打开连接到Socket的输入输出流;

④按照一定的协议对Socket进行读写操作;

④关闭Socket。

 

Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待socket连接,如果达成连接则开始执行输入输出操作,通过输入流获取客户端的请求信息,通过输出流返回客户端信息。客户端则只需创建一个Socket指定服务器的ip和端口号即可。

 

下面看服务器代码:

public class SocketServer {
	public static int port = 3333;
	public static String ip = "172.30.1.101";
	
	public static void main(String[] args) throws IOException {
		//①启动服务器
		ServerSocket server = new ServerSocket(port);
		System.out.println("server running...");
		//②监听Socket
		Socket socket = server.accept();
		//③IO流
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
		
		String client = null;
		//如果接收到客户端的exit信号则关闭Socket
		while(!"exit".equalsIgnoreCase(client = br.readLine())){
			System.out.println("from client say:"+client);
			pw.println("server get your info :" +client);
			pw.flush();
		}
				
		br.close();
		pw.close();
		
		socket.close();
		server.close();
	}
}

 

下面看客户端代码:

public class SocketClient {
	
	public static void main(String[] args) throws IOException {
		//连接服务器
		Socket socket = new Socket(SocketServer.ip,SocketServer.port);
		System.out.println("client running...");
		
		System.out.println("-----insert your info:");
		//用户在控制台输入向服务器发送的信息
		BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in));
		//IO流
		PrintWriter pw = new PrintWriter(socket.getOutputStream());
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		
		String server = null;
		//如果用户输入exit则关闭Socket
		while(!"exit".equalsIgnoreCase(server =  brConsole.readLine())){
			pw.println(server);
			pw.flush();
			System.out.println("from server say:"+br.readLine());
		}
		//当用户输入exit时,把exit信息发送给服务器,服务器关闭当前Socket
		pw.println(server);
		pw.flush();
		
		pw.close();
		brConsole.close();
		br.close();
		
		socket.close();
	}
}

 

 

需要注意的是:

测试时,首先启动服务器,然后启动客户端即可;

使用PrintWriter写数据的时候务必使用println,因为对方使用BufferReader的readline来取数据,如果使用print则BufferReader读取不到数据。

这只是基础实例,不支持并发。

java通信之Socket通信基础

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1、 服务器端处理流程 接触一种技术,首先都要熟悉它的生命周期,这样才能从大局上看每个流程的细节
网络通信的三要素: 1. IP: 设备的标识 2. 端口号: 进程间共同的标识 3. 传输协议: UDP协议: 面
Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信连的句柄。应用程序通常通过“套接
一.通信中常用到的命令行命令 1.查看你的电脑与其他服务器的连接信息-->>netstat -an 当你在命
1:简介 Java语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了许多有
最近,要做一个东西,是android客户端要与VC写的服务器端进行数据连接与交换,无奈,先从java测试吧
环境准备 【服务器端】 JDK1.6,“java.net”包对网络编程提供了非常全面的支持,包括Socket 开发环
环境准备 【服务器端】 JDK1.6,“java.net”包对网络编程提供了非常全面的支持,包括Socket 开发环
环境准备 【服务器端】 JDK1.6,“java.net”包对网络编程提供了非常全面的支持,包括Socket 开发环
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号