Socket通信入门小实例

客户端:

public class Client {
	private int port = 8000;
	private String host = "localhost";
	private Socket socket;

	public Client() throws UnknownHostException, IOException {
		socket = new Socket(host, port);
	}

	public void readFromUser() throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		while((line = br.readLine()) != null){
			if(line.equals("bye")){
				socket.close();
				System.out.println("关闭socket");
				break;
			}
			send(line);
		}
	}

	public void send(String msg) throws IOException {
		PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
		pw.println(msg);
	}

	public static void main(String args[]) throws UnknownHostException,
			IOException {
		new Client().readFromUser();
	}
}

服务端:

public class Server {
	private int port = 8000;
	private ServerSocket serverSocket;
	private ExecutorService executorService;
	private final int POOL_SIZE = 4;

	public Server() throws IOException {
		serverSocket = new ServerSocket(port, 2);
		// 创建线程池
		executorService = Executors.newFixedThreadPool(Runtime.getRuntime()
				.availableProcessors()
				* POOL_SIZE);
		System.out.println("服务器启动。。。。。" + "初始线程数:"
				+ Runtime.getRuntime().availableProcessors() * POOL_SIZE);
	}

	public void service() throws IOException {
		int count = 0;
		while (true) {
			Socket socket = serverSocket.accept();
			System.out.println(++count + "客户端已链接");
			// new Thread(new Handler(socket)).start();
			executorService.execute(new Handler(socket));
		}
	}

	public static void main(String args[]) throws IOException {
		new Server().service();
	}

	private class Handler implements Runnable {

		private Socket socket;

		public Handler(Socket socket) {
			this.socket = socket;
		}

		public void run() {
			try {
				handle();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		private void handle() throws IOException {
			BufferedReader br = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			String line;
			while ((line = br.readLine()) != null) {
				if(line.equals("goodbye")){
					socket.close();
					serverSocket.close();
					break;
				}
				System.out.println("From " + socket.getPort() + ":" + line);
			}
		}
	}
}

服务器采用了JDK自带的线程池来处理并发请求。

还可以使用NIO来实现,即非阻塞通信

Socket通信入门小实例,布布扣,bubuko.com

时间: 2024-10-26 08:16:57

Socket通信入门小实例的相关文章

socket通信入门

以一个基本的python程序为例解释 源代码如下: #!/usr/bin/env python  #指出代码用什么程序去运行它.首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作. # basic connect example -connect.py import socket # This module provides socket operations and some related functions.On Unix, it supports IP

[转]Vue中Vuex的详解与使用(简洁易懂的入门小实例)

怎么安装 Vuex 我就不介绍了,官网上有 就是 npm install xxx 之类的.(其实就是懒~~~哈哈) 那么现在就开始正文部分了 众所周知 Vuex 是什么呢?是用来干嘛的呢? Vuex 是一个专为 Vue.js 应用程序开发的`状态管理模式`.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 例如:你有几个数据,几个操作,在多个组件上都需要使用,如果每个组件都去调用都是写,就会很麻烦,代码又臭又长.当然 如果没有大量的操作和数据需要在多个

HTML入门小实例

页面布局的三种方式: a.TABLE布局:已过时 b.DIV+CSS:当前主流 c.HTML5布局标签:未来趋势 1.学生成绩表设计 注意: <body> <table height="250px" width="600" border="1" align="center" cellpadding="10" rules="all"> <caption ali

(8)Linux(客户端)和Windows(服务端)下socket通信实例

Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows   Client端 #include <stdio.h> #include <Windows.h> #pragma comment(lib, "ws2_32.lib") #define Port 5000 #define IP_ADDRESS "192.168.1.30"     //服务器地址

Flex入门(二)——Flex+BlazeDs+J2ee小实例

首先来简单介绍一下BlazeDS. BlaseDS的核心功能包括RPC Services(远程过程调用服务) 和Messaging Service(消息服务).BlazeDS是一个基于服务器的Java远程调用(remoting)和web消息传递(messaging)技术,使得后台的Java应用程序可以和运行在浏览器上的Flex应用程序能够互相通信.简单来说一个BlazeDS应用包括客户端(Flex或AIR应用程序)和一个服务端(J2EE程序).BlazeDS在期间起着承上启下的作用,Flex和B

Android基础入门教程——7.6.3 基于TCP协议的Socket通信(2)

Android基础入门教程--7.6.3 基于TCP协议的Socket通信(2) 标签(空格分隔): Android基础入门教程 本节引言: 上节中我们给大家接触了Socket的一些基本概念以及使用方法,然后写了一个小猪简易聊天室的 Demo,相信大家对Socket有了初步的掌握,本节我们来学习下使用Socket来实现大文件的断点续传! 这里讲解的是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用 就好! 1.运行效果图: 1.先把我们编写好的Socket服务

Android基础入门教程——7.6.2 基于TCP协议的Socket通信(1)

Android基础入门教程--7.6.2 基于TCP协议的Socket通信(1) 标签(空格分隔): Android基础入门教程 本节引言: 上一节的概念课枯燥无味是吧,不过总有点收获是吧,本节开始我们来研究基于TCP协议的Socket 通信,先来了解下Socket的概念,以及Socket通信的模型,实现Socket的步骤,以及作为Socket服务 端与客户端的两位各做要做什么事情!好的,我们由浅入深来扣这个Socket吧! 1.什么是Socket? 2.Socket通信模型: Socket通信

php socket通信机制实例说明与代码

php socket通信机制实例说明与代码----什么是socket 所谓socket一般也称作"套接字",用于描述ip地址和端口,是一个通讯链的句柄.使用程序一般经过"套接字"向network发出请求也许应对network请求.说白了就是一种通讯机制.它类似于银行,电信啊这一些部分的电话客服业务单元.您打电话的时候,那边会调设置一个人回答您的问题,客服业务单元就相当于socket的服务器端了,您这边呢就相当于用户端了,在和您通话完结前,假设有人在想找和您通话的那个

python的socket通信实例

一.socket简介 1. 套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象. 它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要. 套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳. 许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供