本文将给出完整 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)相关推荐

  1. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  2. php udp发送和接收_php socket通信(tcp/udp)实例分析

    本文实例讲述了php socket通信(tcp/udp)方法.分享给大家供大家参考,具体如下: 注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.p ...

  3. 聊聊Socket、TCP/IP、HTTP、FTP及网络编程

    1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...

  4. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  5. 转载 Socket与TCP/IP的关系 转(非常好的一篇文章!)

    要写网络程序就必须用 Socket ,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会 Socket 编程?一般来说,很多人都会说, Socket 编程基本就是 listen , accep ...

  6. java tcp ip通信_Java中Socket实现TCP/IP协议的通信

    TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的. Jav ...

  7. socket编程TCP/IP通信(windows下,C++实现)

    1.简单理解什么是Socket? 通俗理解: Socket翻译成中文是套接字,同时也有插座的意思.可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的 ...

  8. socket、tcp/ip、http三者之间的区别和原理

    网络七层模型 OSI 模型(Open System Interconnection model)是计算机和网络在世界范围内实现互联的标准框架.它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的 ...

  9. socket通信 tcp协议和udp协议 C++

    Socket通信学习(套字接) Socket通信主要分两种:TCP协议和UDP协议 TCP:Transmission Control Protocol UDP:User Datagram Protoc ...

最新文章

  1. Session丢值的问题
  2. 39 n 39 是不是c语言常量,自考“高级语言程序设计”习题答案详解(39)
  3. rs232串口驱动_电机驱动器-copley
  4. 使用 RequireJS 优化 Web 应用前端
  5. Spring-Spring 开发环境搭建及HelloSpring
  6. 揭秘!疫情下的阿里员工如何上班?
  7. springcloud-05-ribbon中不使用eureka
  8. 负数在计算机中如何表示?
  9. Spring Boot基础学习笔记12:组件注册整合Servlet三大组件
  10. 《互联网+ 电商平台设计与运营》一一2.4 小结
  11. 如何保证进程间同步工作_系统设计硬核知识(2)——操作系统的进程管理
  12. Linux系统时间不同步问题
  13. linux sed 不输出,linux-使用awk和sed消除不必要的输出
  14. 计算机网络-路由器广域网配置
  15. Sicily 1049. Mondriaan 解题报告
  16. linux win10双系统启动顺序,修改双系统(win10+ubuntu)启动顺序和启动时间
  17. EXCEL使用技巧大全:输入的技巧
  18. 记录:英文参考文献格式
  19. git-cz 一款git commit 统一规范的工具
  20. luogu 3426题解 (KMP)

热门文章

  1. 哪些“双一流”更得华为偏爱?这所高校人数远超清北华五
  2. 本地应用 v-model
  3. 复习计算机网络基础 day5--物理层
  4. 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
  5. 基于交换技术的网络中,全双工主要运行在?( 内有答案与详解)
  6. ACMNO.33 C语言-最大值3 分别用函数和带参的宏,从三个数中找出最大的数。
  7. 一个小改动,CNN输入固定尺寸图像改为任意尺寸图像
  8. 树莓派安装docker
  9. MaxCompute Studio使用心得系列7—作业对比
  10. 设计模式-建造者模式(05)