实现socket的服务和客户端通信
对学习过程中自己敲的一些关于socket有关的代码做了个简单总结,在这分享一下,给有需要的同学借鉴一下。
什么是socket?
首先我们先来完成socket服务端的代码开发。
在服务端的main方法里,我们将socketserver对象设置成持久的,并绑定于本机的8899端口上,去接收客户端的socket连接。
package com.wenbing.socket; import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ServerSocket;
import java.net.Socket; public class ServiceServer { public static void main(String[] args) throws Exception{
// 创建一个serversocket,绑定到本机的8899端口上
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("localhost", 8899)); // 接收客户端的连接;accept是一个阻塞方法,会一直等待,到有客户端请求连接才返回
while (true) {
Socket socket = server.accept();
// 每个socket请求都给一个线程来处理
new Thread(new ServiceServerTask(socket)).start(); } } }
package com.wenbing.socket; import java.io.*;
import java.net.Socket; public class ServiceServerTask implements Runnable { Socket socket;
InputStream inputStream = null;
OutputStream outputStream = null; public ServiceServerTask(Socket socket) {
this.socket = socket;
} // 业务逻辑,跟客户端进行数据交互
@Override
public void run() { try {
// 从socket连接中获取到与client之间的网络通信输入流
inputStream = socket.getInputStream();
// 从socket连接中获取到与client之间的网络通信输出流
outputStream = socket.getOutputStream(); // BufferedReader读取数据是一个字符一个字符读取,遇到回车即停止
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
// 从网络通信输入流中读取客户端发送过来的数据,读取一行,遇到回车即结束
// 注意:socketinputstream的读数据的方法是阻塞的
//读取很多行数据,用while循环读
// String line = "";
// String param = "";
// while (( line = br.readLine()) != null) {
// param = br.readLine();
// System.out.println(param);
// }
String param = br.readLine(); System.out.println(param);
GetDataServiceImpl getDataService = new GetDataServiceImpl();
String result = getDataService.getData(param); // 将调用结果写到socket的输出流中,以发送给客户端
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println(result);
printWriter.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关流,现在是在每个线程里
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
}
处理数据的方法。
package com.wenbing.socket;
public class GetDataServiceImpl {
public String getData(String param) {
return "OK-" + param;
}
}
接下来就是socket客户端了。客户端和服务端代码基本相同。
package com.wenbing.socket; import java.io.*;
import java.net.Socket; public class ServiceClient { public static void main(String[] args) throws Exception {
// 向服务器发出请求建立连接
Socket socket = new Socket("localhost", 8899);
// 从socket中获取输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println("hello");
printWriter.flush(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String result = bufferedReader.readLine();
System.out.println(result); inputStream.close();
outputStream.close();
socket.close();
} }
简单的socket小例子,送给java小白们。
纸上得来终觉浅,绝知此事要躬行,一定要跟着敲一敲才更容易理解哦。
实现socket的服务和客户端通信的更多相关文章
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- 计算机网络:套接字(Socket)| Python socket实现服务器端与客户端通信,使用TCP socket阿里云ECS服务器与本机通信
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接字上联应 ...
- socket,模拟服务器、客户端通信
服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...
- Netty 的基本简单实例【服务端-客户端通信】
Netty是建立在NIO基础之上,Netty在NIO之上又提供了更高层次的抽象. 在Netty里面,Accept连接可以使用单独的线程池去处理,读写操作又是另外的线程池来处理. Accept连接和读写 ...
- 用PHP的socket实现客户端到服务端的通信
服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...
- (C#:Socket)简单的服务端与客户端通信。
要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
单客户端和服务端的通信(基于UDP) 代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...
- C# Socket简单例子(服务器与客户端通信)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...
随机推荐
- c# 全局钩子实现扫码枪获取信息。
原文:c# 全局钩子实现扫码枪获取信息. 1.扫描枪获取数据原理基本相当于键盘数据,获取扫描枪扫描出来的数据,一般分为两种实现方式. a)文本框输入获取焦点,扫描后自动显示在文本框内. b)使用键盘钩 ...
- CenOS7 docker部署lnmp环境
Step1:下载lnmp镜像 [root@docker html]# docker pull winstonpro/lnmp Step2:启动lnmp镜像的docker实例 [root@docker ...
- win10中使用sqlserver2008r2 SQL Server 配置管理器
原文:win10中使用sqlserver2008r2 SQL Server 配置管理器 使用 Windows10 访问 SQL Server 配置管理器 因为 SQL Server 配置管理器是 Mi ...
- 什么是 MEF?
什么是 MEF? Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用程序的库. 它让应用程序开发人员得以发现和使用扩展且无需配置. 它还让扩展开发人 ...
- WebApi实现验证授权Token,WebApi生成文档等 - CSDN博客
原文:WebApi实现验证授权Token,WebApi生成文档等 - CSDN博客 using System; using System.Linq; using System.Web; using S ...
- 在asp.net 中web.config配置错误页
每当用户访问错误页面时,会出现不友好的错误页面,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现比 ...
- Windows Mount NFS Share from e.g. Linux
Note: Not Stable, so steps below are for reference only ************ Linux Configuration NFS Share 1 ...
- Delphi 10.2 Tokyo的新特性
Delphi 10.2(Tokyo)出来一段时间了,最重要的新特性就是支持Linux的服务端. 官网有详细的介绍: 这里是主要的特性介绍:https://www.embarcadero.com/pro ...
- python读取json文件并解析
# -*- coding: utf-8 -*- import os import json import sys reload(sys) sys.setdefaultencoding('utf-8') ...
- Postman支持的几种数据类型请求方式
一.postman作为web应用开发工具,可以用于模拟多种请求方式,但是支持的传参类型又不尽相同.根据面板上的几种数据打包方式来选择合适的请求数据类型. form-data 就是http请求中的mul ...