Java网络编程——Socket与ServerSocket阻塞通信

转载 2013年12月03日 20:41:10

java程序可以通过ServerSocket和Socket两个类来实现TCP服务器、TCP客户端

具体demo如下:

client.java

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


public class Client {
	public static void main(String[]args) throws IOException{
		Socket socket=new Socket("127.0.0.1",30000);
		//将Socket对应的输出流包装成BufferedReader
		BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		String line=br.readLine();
		System.out.println("来自服务器的数据:"+line);
		//关闭输入流、socket
		br.close();
		socket.close();
	}
}
service.java

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

public class Server {
	public static void main(String[]args) throws IOException{
		//创建一个ServerSocket,用于监听客户端Socket的连接请求
		ServerSocket ss=new ServerSocket(30000);
		//采用循环不断接受来自客户端的请求
		while(true){
			//每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
			Socket s=ss.accept();
			//将Socket对应的输出流包装成PrintStream
			PrintStream ps=new PrintStream(s.getOutputStream());
			ps.println("您好,您收到了服务器的新年祝福");
			//关闭输出流,关闭Socket
			ps.close();
			s.close();
		}
	}
}


    这个简单的小demo就实现了客户端与服务端的通信。但是由于此种方式是基于阻塞式API的,即当程序执行输入、输出操作后,在这些操作返回之前会一直阻塞该线程,所以服务器必须为每个客户端都提供一条独立线程进行处理,当服务器需要同时处理大量客户端时,这种做法会导致性能的下降。java提供的NIO API能够有效的解决这个问题,可以让服务器使用一个或者有限几个线程来同时处理连接到服务器上的所有客户端,以开发高性能的网络服务器。也就是Selector的应用。

Java网络编程——使用NIO实现非阻塞Socket通信

除了普通的Socket与ServerSocket实现的阻塞式通信外,java提供了非阻塞式通信的NIO API。先看一下NIO的实现原理。          从图中可以看出,服务器上所有Cha...
  • yanmei_yao
  • yanmei_yao
  • 2013年02月17日 21:16
  • 9801

Java Socket编程(四) 异步服务器

基于Java Socket给出了异步服务器的实现
  • yjp19871013
  • yjp19871013
  • 2016年12月14日 10:26
  • 2132

读Socket流时产生阻塞的解决方案

在用socket写一个服务器时遇到了问题于是将主要的问题抽了出来,代码如下,由于代码很简单于是也没有注释。public class Main { private static ServerSo...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015年11月01日 08:50
  • 15723

学习JAVA—网络编程之Socket、ServerSocket、C/S模式

  • 2012年12月29日 00:51
  • 29KB
  • 下载

Java网络编程——使用NIO实现非阻塞Socket通信

除了普通的Socket与ServerSocket实现的阻塞式通信外,java提供了非阻塞式通信的NIO API。先看一下NIO的实现原理。          从图中可以看出,服务器上所有Cha...
  • huihuang1515
  • huihuang1515
  • 2013年12月03日 20:15
  • 1242

JAVA: Socket和ServerSocket网络编程

面是本次学习的笔记。主要分异常类型、交互原理、Socket、ServerSocket、多线程这几个方面阐述。   异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型。以下四种类...
  • bigtree_3721
  • bigtree_3721
  • 2016年05月03日 10:22
  • 220

java 网络编程类 DatagramSocket,ServerSocket,Socket

TCP,传输控制协议(Transmission COntrol Prototcl)面向连接的通信协议(0~1023已被使用)UDP,用户数据报协议(User Datagram Protocol)是无连...
  • xxs1984
  • xxs1984
  • 2011年03月23日 09:07
  • 787

【幻化万千戏红尘】qianfengDay23-java基础学习:网络编程、TCP IP协议、端口Socket、ServerSocket

课程回顾: 线程安全的解决 今日内容: 网络: 通过外部的网络设备,将分布在不同区域的计算机连接在一起, 实现不同计算机之间的数据交互 不同的计算机想进行数据的交互,就必须...
  • u013742672
  • u013742672
  • 2016年08月11日 10:01
  • 110

Java笔记(9)-网络编程、URL、InetAddress、套接字、Socket、ServerSocket、多线程、UDP、广播数据包、远程调用

不必说碧绿的菜畦,光滑的石井栏,高大的皂荚树,紫红的桑葚;也不必说鸣蝉在树叶里长吟,肥胖的黄蜂伏在菜花上,轻捷的叫天子(云雀)忽然从草间直窜向云霄里去了。 Java网络编程 URL 类 InetAd...
  • Peng_Hong_fu
  • Peng_Hong_fu
  • 2016年09月24日 08:48
  • 3106

网络编程__【TCP传输】(重点)【Socket & ServerSocket】

TCP是面向连接的,在建立socket服务时就要有服务端存在,连接成功形成通路后,在该通道内进行数据的传输。 与UDP不同,TCP加入了网络流的概念,作为客户端InputStream的源 TCP传输步...
  • ie800
  • ie800
  • 2014年01月09日 15:39
  • 1203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java网络编程——Socket与ServerSocket阻塞通信
举报原因:
原因补充:

(最多只允许输入30个字)