[tcp通信]
来源:不详;
client:
  1. package com.defonds.socket.begin;
  2. import java.io.BufferedReader;
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.net.Socket;
  8. public class Client {
  9. public static final String IP_ADDR = "localhost";//服务器地址
  10. public static final int PORT = 12345;//服务器端口号
  11. public static void main(String[] args) {
  12. System.out.println("客户端启动...");
  13. System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
  14. while (true) {
  15. Socket socket = null;
  16. try {
  17. //创建一个流套接字并将其连接到指定主机上的指定端口号
  18. socket = new Socket(IP_ADDR, PORT);
  19. //读取服务器端数据
  20. DataInputStream input = new DataInputStream(socket.getInputStream());
  21. //向服务器端发送数据
  22. DataOutputStream out = new DataOutputStream(socket.getOutputStream());
  23. System.out.print("请输入: \t");
  24. String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
  25. out.writeUTF(str);
  26. String ret = input.readUTF();
  27. System.out.println("服务器端返回过来的是: " + ret);
  28. // 如接收到 "OK" 则断开连接
  29. if ("OK".equals(ret)) {
  30. System.out.println("客户端将关闭连接");
  31. Thread.sleep(500);
  32. break;
  33. }
  34. out.close();
  35. input.close();
  36. } catch (Exception e) {
  37. System.out.println("客户端异常:" + e.getMessage());
  38. } finally {
  39. if (socket != null) {
  40. try {
  41. socket.close();
  42. } catch (IOException e) {
  43. socket = null;
  44. System.out.println("客户端 finally 异常:" + e.getMessage());
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
服务端:
  1. package com.defonds.socket.begin;
  2. import java.io.BufferedReader;
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.InputStreamReader;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class Server {
  9. public static final int PORT = 12345;//监听的端口号
  10. public static void main(String[] args) {
  11. System.out.println("服务器启动...\n");
  12. Server server = new Server();
  13. server.init();
  14. }
  15. public void init() {
  16. try {
  17. ServerSocket serverSocket = new ServerSocket(PORT);
  18. while (true) {
  19. // 一旦有堵塞, 则表示服务器与客户端获得了连接
  20. Socket client = serverSocket.accept();
  21. // 处理这次连接
  22. new HandlerThread(client);
  23. }
  24. } catch (Exception e) {
  25. System.out.println("服务器异常: " + e.getMessage());
  26. }
  27. }
  28. private class HandlerThread implements Runnable {
  29. private Socket socket;
  30. public HandlerThread(Socket client) {
  31. socket = client;
  32. new Thread(this).start();
  33. }
  34. public void run() {
  35. try {
  36. // 读取客户端数据
  37. DataInputStream input = new DataInputStream(socket.getInputStream());
  38. String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException
  39. // 处理客户端数据
  40. System.out.println("客户端发过来的内容:" + clientInputStr);
  41. // 向客户端回复信息
  42. DataOutputStream out = new DataOutputStream(socket.getOutputStream());
  43. System.out.print("请输入:\t");
  44. // 发送键盘输入的一行
  45. String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
  46. out.writeUTF(s);
  47. out.close();
  48. input.close();
  49. } catch (Exception e) {
  50. System.out.println("服务器 run 异常: " + e.getMessage());
  51. } finally {
  52. if (socket != null) {
  53. try {
  54. socket.close();
  55. } catch (Exception e) {
  56. socket = null;
  57. System.out.println("服务端 finally 异常:" + e.getMessage());
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }

经典 socket通讯 -- 已验证的更多相关文章

  1. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  2. Android笔记:Socket通讯常见问题

    经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2  如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...

  3. 利用BlazeDS的AMF3数据封装与Flash 进行Socket通讯

    前几天看到了Adobe有个开源项目BlazeDS,里面提供了Java封装AMF3格式的方法.这个项目貌似主要是利用Flex来Remoting的,不过我们可以利用他来与Flash中的Socket通讯. ...

  4. PHP+Ajax 异步通讯注册验证

    HTML代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  5. Protobuf实现Android Socket通讯开发教程

    本节为您介绍Protobuf实现Android Socket通讯开发教程,因此,我们需要先了理一下protobuf 是什么? Protocol buffers是一种编码方法构造的一种有效而可扩展的格式 ...

  6. 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)

    今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...

  7. 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)

    前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...

  8. Socket通讯-Netty框架实现Java通讯

    Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...

  9. Delphi 跨平台 Socket 通讯库

    Delphi 跨平台 Socket 通讯库 免费开源的Delphi 跨平台 Socket 通讯库. 源码URL:https://github.com/winddriver/Delphi-Cross-S ...

随机推荐

  1. WP8 独立存储 总结3(应用设置)

    •可在独立存储中使用ApplicationSettings对象•在独立存储中存储键/值对的Dictionary方式存储 •存储的对象将永久保存 在应用设置中保存数据 void saveString(s ...

  2. K2任命新的亚太区高级副总裁

    K2, 一个屡获殊荣的企业应用软件公司宣布,任命陈光明(Tan Kwang Meng, KM)为亚太区高级副总裁.这次任命是对公司持续发展的肯定,同时也是对将亚太区作为全球扩张战略的关键市场的承诺. ...

  3. (转载)Htmlparser Filter 简要归纳

    1 . 逻辑关系:与或非 AndFilter()           Creates a new instance of an AndFilter. AndFilter(NodeFilter[] pr ...

  4. C++指针详解

    指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占 ...

  5. BinaryWriter

    c#里的文件操作 fileInfo dir的一大堆属性不用说 地球人都知道(什么fileName,create() delete()) ,文件系统的概念很好理解的 文件读写也好理解(硬盘到内存 然后再 ...

  6. GoldenGate中使用strcat和strext进行数据转换

    在OGG中可以对源字段的内容进行合并或拆分,从而实现类似于“ETL”的功能.strcat(s1,s2,s3,,,):用于合并字串:strext(str, start, end):用于获取指定位置的字串 ...

  7. Xrun 将 app 转化为 IPA

    xcodebuild命令行打包,在使用xcodebuild编译后发现有些东西有些临时性质的东西,依然存在,搜索了一些资料,找到有clean的命令:在之前打包都是生成app文件,将app打包成ipa文件 ...

  8. FSMC stm32

    1.FSMC机制 FSMC(Flexihie Static Memory Controller,可变静态存储控制器)是STM32系列中内部集成256 KB以上FlaSh,后缀为xC.xD和xE的高存储 ...

  9. Ubuntu 14.10 下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  10. STL源码分析《3》----辅助空间不足时,如何进行归并排序

    两个连在一起的序列 [first, middle) 和 [middle, last) 都已经排序, 归并排序最核心的算法就是 将 [first, middle) 和 [middle, last) 在  ...