`

Socket 编程 - 单个客户端

    博客分类:
  • java
阅读更多
Socket编程就是根据服务器/客户端模型,在Socket API的基础上开发的网络计算机和进程间相互通信的应用。

1. 服务端绑定一个端口号,并在此端口监听客户端的连接,线程会block直到有客户连接请求,读取请求信息,然后处理并返回。
2. 客户端和指定的服务器的指定端口建立连接,发送请求信息,并等待返回信息。

服务端:
public class MyServer {
	ServerSocket server;
	Socket client;
	BufferedReader in;
	PrintWriter out;
	
	public MyServer() {
		try {
			// Instantiate a ServerSocket with specified port
			server = new ServerSocket(4451);
			
			// Listen on the port to receive the connection request
			client = server.accept();
			
			// Construct a reader to get the information from the client
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			
			// Construct a writer to respond to the client
			out = new PrintWriter(client.getOutputStream());
			
			// Continually to retrieve the message from the client
			while (true) {
				String input = in.readLine();
	
				System.out.println(input);
				out.println("has received: " + input);
				out.flush();
				
				if (input.equals("end"))
					break;
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			// Release the resources - omitted
		}
	}

	public static void main(String[] args) {
		new MyServer();
	}
}



客户端:
public class MyClient {
	Socket connection;
	BufferedReader in;
	PrintWriter out;
	BufferedReader reader;
	
	public MyClient() {
		try {
			// Establish a connection to the Socket server
			connection = new Socket(InetAddress.getLocalHost(),4451);
			
			// Construct a reader to get the response from the server
			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			
			// Construct a writer to send messages to the server
			out = new PrintWriter(connection.getOutputStream());
			
			// Construct a reader to accept the user input
			reader = new BufferedReader(new InputStreamReader(System.in));
			
			// Continuously send out the messages to the server and receive the response 
			while (true) {
				String str = reader.readLine();
				out.println(str);
				out.flush();
				System.out.println("sent out: " + str);
				
				if (str.equals("end"))
					break;
				
				System.out.println(in.readLine());
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// Release the resources - omitted
		}
	}

	public static void main(String[] args) {
		new MyClient();
	}

}


其中:
1. out = new PrintWriter(connection.getOutputStream()); 使用系统默认的编码格式。
如果默认编码不符合要求,使用OutputStreamWriter指定:
out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "utf-8"));

2. 可以把手动flush改成自动的:
out = new PrintWriter(connection.getOutputStream(), true);
这样,当println, printf, format方法调用时,将缓存输出到底层流并清空缓存。

3. 必须首先开启服务端,否则客户端建立连接的时候会报java.net.ConnectException: Connection refused: connect
分享到:
评论

相关推荐

    java编程socket与线程之单个客户端与多个客户端向服务端发送

    这是两个简单的socket与线程的小例子,一个是单个客户端向服务端发送图片,另外一个是多个客户端向服务端发送图片,例子都是.java文件,复制到eclipse中便可以直接使用的,对于刚刚接触线程与socket网络编程的人,...

    socket编程,CS间相互通讯(含实验报告)

    1)设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 2)服务端程序能响应单个或任意多个客户端连接...

    linux网络编程-宋敬彬-part1

    2.2.3 单个文件编译成执行文件 22 2.2.4 编译生成目标文件 22 2.2.5 多文件编译 23 2.2.6 预处理 24 2.2.7 编译成汇编语言 24 2.2.8 生成和使用静态链接库 25 2.2.9 生成动态链接库 26 2.2.10 动态...

    Socket编程

    Socket之编程 基于Serializable接口类进行电脑端和手机端的网络数据交互,其中没有用json传输数据, 此次程序是进行单个实体类提交或者通过list集合类进行整体提交的方式进行程序的数据交互, 再客户端还添加了判断...

    Linux下socket实现TCP网络通讯(多个客户端之间的通讯)

    在学习《UNIX网络编程》基础上自己动手实现TCP服务器和客户端通讯,这个版本是进阶版程序——实现多个客户端的之间的通讯。...初学者可以休息我的入门版程序——实现单个客户端的之间的通讯,可见我的其他资源。

    java 论综论网络Socket编程.doc

    单个客户端与服务器相连以及多个客户机与服务器相连这里面有非常详细的说明,是一个值得一看的小论文。 同时还实现用计算机名寻找其IP地址的功能!!! <br>

    java socket多线程聊天

    该软件是一个基于java语言的socket编程,可以实现单个服务器对应多个客户端的聊天。采用swt,功能还是比较完善的。

    Naga-Socket:Naga-Socket - Java 简单套接字

    所有这些都是从单个线程驱动的,使其对客户端(例如,允许 I/O 在 AWT 线程中完成而不需要任何线程)和服务器编程(所有连接的 1 个线程而不是 2 个线程/联系)。 Naga 在内部是一个简单的 NIO 实现,没有抛出任何...

    实验1:Socket通信实验

    1)设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 2)服务端程序能响应单个或任意多个客户端...

    自制C#socket通信源码,带注释,网络编程小白入门帮手

    自制C#socket通信源码,带注释,网络编程小白入门帮手。支持多点通信,单个服务器对多个客户端。

    C# socket 源码 多人聊天

    可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中...

    Python核心编程第二版

     第11章 函数和函数式编程   11.1 什么是函数?   11.1.1 函数vs过程   11.1.2 返回值与函数类型   11.2 调用函数   11.2.1 函数操作符   11.2.2 关键字参数  11.2.3 默认参数   11.2.4 ...

    基于java的局域网聊天系统-毕业设计.doc

    图2 面向连接的SOCKET编程模型 图3 面向非连接的SOCKET编程模型 Windows Sockets规范中定义了一个新的数据类型 SOCKET,这一类型的定义对于将来Windows Sockets规范的升级是必要的。这一类型的定义保证了应用程序向...

    Python核心编程第二版(ok)

    Python核心编程第二版(ok) 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python   1.2 起源   1.3 特点   1.3.1 高级   1.3.2 面向对象   1.3.3 可升级   1.3.4 可扩展   ...

    本项目包括利用多线程、select、poll以及epoll实现的并发处理连接请求

    服务器与客户端建立连接需要使用到一些接口,包括但不限于socket、bind、listen、accept.高并发编程会有一些服务器模型,例如reactor或proactor。这两类都要使用到IO多路复用,O多路复用是指单个进程/线程就可以同时...

    老男孩python 四期

    ※分别开发服务器端和客户端,通过Socket模块实现网络通信,模拟实现FTP主要的文件下载、上传功能、实现多用户并发在线使用。 第六天 1、 项目实战三、开发运维审计服务器,实现公司全网用户操作审计需求 ※开发一个...

    linux网路编程 中文 23M 版

    第2 章Linux编程环境....................................................................................................14 2.1 Linux环境下的编辑器................................................. 14 ...

    使用Python开发SQLite代理服务器的方法

    技术要点是Socket编程,在数据库服务器上运行服务程序,该服务程序监听特定端口、执行代理程序发来的SQL语句并返回结果;代理程序负责接收客户端的SQL语句并转发给服务器,然后再把服务器返回的结果转

    Java课程设计项目实例《基于微服务的在线签到》子系统.pdf

    作者在本文中将重点介绍子系统所应用的核心技术——微服务、反射、 对象序列化、多线程以及基于 TIP/IP 的 Socket 通讯等,此外还通过具体的程序代码实现为 读者介绍微服务的底层实现原理、Socket 通讯编程实现。...

    Java范例开发大全 (源程序)

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7...

Global site tag (gtag.js) - Google Analytics