手把手教你 Socket 通信(TCP/IP)
本文将给出完整 Socket 通信代码,在 eclipse 中亲测有效。在Android Studio中用Java开发也是一样的,只是把代码和控件搭配一下,注册监听就好。 |
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket 本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
下载eclipse:
https://www.eclipse.org/
本文将给出完整 Socket 通信代码,在 eclipse 中亲测有效。在Android Studio中用Java开发也是一样的,只是把代码和控件搭配一下,注册监听就好。区别就是在 AS 中 import 的声明不太一样,然后窗口不需要自己建立。
效果如图:
在eclipse中,File→New→Java Project→起个英文名字→Finish(我起的名字是TCP)
目录结构:
新建完以后有个src默认包,右键 src→New→Package→ 输入 com.net(因为程序里我用的包的名字是这个,你可以同时两个一起改)→ Finish
然后右键 com.net → New → Class → 输入 TCPClient(因为我程序里面用的这个类名称)
然后右键 com.net → New → Class → 输入 TCPServer(因为我程序里面用的这个类名称)
两个里面分别粘贴代码:
TCPServer
package com.net; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public class TCPServer { static DataInputStream dis=null; public static void main(String[] args){ boolean started=false; Socket s=null; TextArea ta=new TextArea(); ta.append("从客户端接受的数据:"+"\n"); ServerSocket ss=null; try{ ss=new ServerSocket(8866); //端口号 }catch(BindException e){ System.exit(0); }catch(IOException e){ e.printStackTrace(); } Frame f=new Frame("服务器端"); //窗体名称 f.setLocation(300, 300); //窗体出现位置 f.setSize(200, 200); //窗体大小 f.add(ta,BorderLayout.NORTH); f.pack(); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setVisible(true); try{ //try-catch块捕捉异常 started=true; while(started){ boolean bConnected=false; s=ss.accept(); bConnected=true; dis=new DataInputStream(s.getInputStream()); while(bConnected){ String str=dis.readUTF(); ta.append(str+"\n"); } } }catch(EOFException e){ System.out.println("Client closed!"); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(dis!=null) dis.close(); if(s!=null) s.close(); }catch(Exception e){ e.printStackTrace(); } } } }
TCPClient
package com.net; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class TCPClient extends Frame{ Socket s=null; DataOutputStream dos=null; DataInputStream dis=null; TextField tf=new TextField(40); List list=new List(6); public static void main(String[] args){ TCPClient client=new TCPClient(); client.list.add("向服务器端发送的数据:"); client.setTitle("客户端"); client.run(); } public void run(){ setLocation(400,300); this.setSize(300, 300); add(tf,BorderLayout.SOUTH); add(list,BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ disconnect(); System.exit(0); } }); tf.addActionListener(new MyListener()); setVisible(true); connect(); } public void connect(){ try{ s=new Socket("127.0.0.1",8866); dos=new DataOutputStream(s.getOutputStream()); }catch(UnknownHostException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } public void disconnect(){ try{ dos.close(); s.close(); }catch(IOException e){ e.printStackTrace(); } } private class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e){ String s1=null; String s2=null; String str=tf.getText().trim(); list.add(str); tf.setText(""); try{ dos.writeUTF(str); dos.flush(); }catch(IOException e1){ e1.printStackTrace(); } } } }
然后先运行服务器,再运行客户端,否则会报错,因为Socket通信本质是先打开服务器监听端口。然后就会出现效果图。
本机回环 IP 是 127.0.0.1,你可以改为其他 IP 地址,即可实现跨机 Socket 通信。
手把手教你 Socket 通信(TCP/IP)相关推荐
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...
- php udp发送和接收_php socket通信(tcp/udp)实例分析
本文实例讲述了php socket通信(tcp/udp)方法.分享给大家供大家参考,具体如下: 注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.p ...
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
常识一:文件句柄限制 在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...
- 转载 Socket与TCP/IP的关系 转(非常好的一篇文章!)
要写网络程序就必须用 Socket ,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accep ...
- java tcp ip通信_Java中Socket实现TCP/IP协议的通信
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的. Jav ...
- socket编程TCP/IP通信(windows下,C++实现)
1.简单理解什么是Socket? 通俗理解: Socket翻译成中文是套接字,同时也有插座的意思.可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的 ...
- socket、tcp/ip、http三者之间的区别和原理
网络七层模型 OSI 模型(Open System Interconnection model)是计算机和网络在世界范围内实现互联的标准框架.它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的 ...
- socket通信 tcp协议和udp协议 C++
Socket通信学习(套字接) Socket通信主要分两种:TCP协议和UDP协议 TCP:Transmission Control Protocol UDP:User Datagram Protoc ...
最新文章
- Session丢值的问题
- 39 n 39 是不是c语言常量,自考“高级语言程序设计”习题答案详解(39)
- rs232串口驱动_电机驱动器-copley
- 使用 RequireJS 优化 Web 应用前端
- Spring-Spring 开发环境搭建及HelloSpring
- 揭秘!疫情下的阿里员工如何上班?
- springcloud-05-ribbon中不使用eureka
- 负数在计算机中如何表示?
- Spring Boot基础学习笔记12:组件注册整合Servlet三大组件
- 《互联网+ 电商平台设计与运营》一一2.4 小结
- 如何保证进程间同步工作_系统设计硬核知识(2)——操作系统的进程管理
- Linux系统时间不同步问题
- linux sed 不输出,linux-使用awk和sed消除不必要的输出
- 计算机网络-路由器广域网配置
- Sicily 1049. Mondriaan 解题报告
- linux win10双系统启动顺序,修改双系统(win10+ubuntu)启动顺序和启动时间
- EXCEL使用技巧大全:输入的技巧
- 记录:英文参考文献格式
- git-cz 一款git commit 统一规范的工具
- luogu 3426题解 (KMP)
热门文章
- 哪些“双一流”更得华为偏爱?这所高校人数远超清北华五
- 本地应用 v-model
- 复习计算机网络基础 day5--物理层
- 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
- 基于交换技术的网络中,全双工主要运行在?( 内有答案与详解)
- ACMNO.33 C语言-最大值3 分别用函数和带参的宏,从三个数中找出最大的数。
- 一个小改动,CNN输入固定尺寸图像改为任意尺寸图像
- 树莓派安装docker
- MaxCompute Studio使用心得系列7—作业对比
- 设计模式-建造者模式(05)