经典 socket通讯 -- 已验证
- package com.defonds.socket.begin;
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.Socket;
- public class Client {
- public static final String IP_ADDR = "localhost";//服务器地址
- public static final int PORT = 12345;//服务器端口号
- public static void main(String[] args) {
- System.out.println("客户端启动...");
- System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
- while (true) {
- Socket socket = null;
- try {
- //创建一个流套接字并将其连接到指定主机上的指定端口号
- socket = new Socket(IP_ADDR, PORT);
- //读取服务器端数据
- DataInputStream input = new DataInputStream(socket.getInputStream());
- //向服务器端发送数据
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- System.out.print("请输入: \t");
- String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
- out.writeUTF(str);
- String ret = input.readUTF();
- System.out.println("服务器端返回过来的是: " + ret);
- // 如接收到 "OK" 则断开连接
- if ("OK".equals(ret)) {
- System.out.println("客户端将关闭连接");
- Thread.sleep(500);
- break;
- }
- out.close();
- input.close();
- } catch (Exception e) {
- System.out.println("客户端异常:" + e.getMessage());
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- socket = null;
- System.out.println("客户端 finally 异常:" + e.getMessage());
- }
- }
- }
- }
- }
- }
- package com.defonds.socket.begin;
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.InputStreamReader;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Server {
- public static final int PORT = 12345;//监听的端口号
- public static void main(String[] args) {
- System.out.println("服务器启动...\n");
- Server server = new Server();
- server.init();
- }
- public void init() {
- try {
- ServerSocket serverSocket = new ServerSocket(PORT);
- while (true) {
- // 一旦有堵塞, 则表示服务器与客户端获得了连接
- Socket client = serverSocket.accept();
- // 处理这次连接
- new HandlerThread(client);
- }
- } catch (Exception e) {
- System.out.println("服务器异常: " + e.getMessage());
- }
- }
- private class HandlerThread implements Runnable {
- private Socket socket;
- public HandlerThread(Socket client) {
- socket = client;
- new Thread(this).start();
- }
- public void run() {
- try {
- // 读取客户端数据
- DataInputStream input = new DataInputStream(socket.getInputStream());
- String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException
- // 处理客户端数据
- System.out.println("客户端发过来的内容:" + clientInputStr);
- // 向客户端回复信息
- DataOutputStream out = new DataOutputStream(socket.getOutputStream());
- System.out.print("请输入:\t");
- // 发送键盘输入的一行
- String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
- out.writeUTF(s);
- out.close();
- input.close();
- } catch (Exception e) {
- System.out.println("服务器 run 异常: " + e.getMessage());
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (Exception e) {
- socket = null;
- System.out.println("服务端 finally 异常:" + e.getMessage());
- }
- }
- }
- }
- }
- }
经典 socket通讯 -- 已验证的更多相关文章
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- Android笔记:Socket通讯常见问题
经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2 如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...
- 利用BlazeDS的AMF3数据封装与Flash 进行Socket通讯
前几天看到了Adobe有个开源项目BlazeDS,里面提供了Java封装AMF3格式的方法.这个项目貌似主要是利用Flex来Remoting的,不过我们可以利用他来与Flash中的Socket通讯. ...
- PHP+Ajax 异步通讯注册验证
HTML代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- Protobuf实现Android Socket通讯开发教程
本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式 ...
- 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...
- 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)
前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...
- Socket通讯-Netty框架实现Java通讯
Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- Delphi 跨平台 Socket 通讯库
Delphi 跨平台 Socket 通讯库 免费开源的Delphi 跨平台 Socket 通讯库. 源码URL:https://github.com/winddriver/Delphi-Cross-S ...
随机推荐
- HDU 1203-Program D
Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的 ...
- Android Support ;v4、v7、v13的区别
google提供了Android Support Library package系列的包来保证来高版本sdk开发的向下兼容性,即我们用4.x开发时,在1.6等版本上,可以使用高版本的有些特性,如fra ...
- Android 微信分享图文资料
上个项目做Android的微信分享,需要分享的内容有图片有文字,看了微信分享的SDK,貌似没有这个API,在网上搜了好久,总算找到解决方法了,直接上代码: public void sendReq(Co ...
- 计算文字的高度和宽度--以微博会话界面中用户名(userName)为例
所用方法 // NOTE: All of the following methods will default to drawing on a baseline, limiting drawing t ...
- MyQQ 前言
从接触IOS以来也将近8个月了,学习了不少知识. 看了一系列的书籍如: <objective-c 开发入门>--语法介绍,学习一门语言是开发的基础.所以这是我大致对语法语句学习的锻炼地方, ...
- 按Right-BICEP要求的任务二的测试
测试方法:Right-BICEP 测试计划: 1.Right-结果是否正确? 2.B-是否所有的边界条件都是正确的? 3.P-是否满足性能要求? 4.是否有乘除法? 5.是否有括号? 6.是否有输出方 ...
- ubuntu16.04操作练习&问题解决
1. 安装更新时提示/boot空间不足: boot文件夹里存放的是系统引导文件和内核的一些东西,旧内核的东西需要手动删除,释放空间.所以: step1:查看 dpkg --get-selections ...
- AFNetworking vs ASIHTTPRequest vs MKNetworkKit
AFNetworking vs ASIHTTPRequest vs MKNetworkKit
- 极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位
0×00 前言 GNSS是Global Navigation Satellite System的缩写.中文称作:全球卫星导航系统.全球导航卫星系统. GNSS泛指所有的卫星导航系统,包括全球的.区域的 ...
- alloc和初始化的定义
1.alloc是为原始实例进行分配内存,但是还不能使用 2.初始化的作用就是将一个对象的初始状态(即它的实例变量和属性)设定为合理的值,然后返回对象.它的目的就是返回一个有用的值