JAVA Socket基础(简单实现)
学习Socket需要了解的几个概念:
Socket 指的是互联网连接中的各个终结点。互联网连接是怎么创建的,通过IP地址加端口号,进行互通。
A电脑(192.168.3.125:80)》》》》B电脑(192.168.3.111:80) 那么这一个个的Ip地址+端口号就是一个Socket(套接字。)
Http协议:两台互联网的通讯需要遵守统一的应用层协议,通常指Http协议。应用层协议还有FTP协议,SMPT简单邮件协议等。
底层协议:IP/TCP协议。除了http需要遵守,还需要遵守IP/TCP协议。
URL: 应用层协议+IP地址+端口号+资源路径 例如 http://www.baidu.com/index.html; (http协议默认遵守的端口号为80) 文件传输默认为21 远程登录Telnet 23
Java中提供的支持Socket操作的几个常用类:
InetAddress :就是表示IP地址啦,没有构造函数。可以用过静态方法InetAddress.getLocalhost()等方法来或者本机的InetAddress对象。toString方法就是打印IP地址。其他方法请参见api文档。
URL: 资源对象。 就是上面所说的URL对象。
Socket:send方法,getOutPutStream() getInputStream()等
DatagramSocket:数据包,UDP传输保存数据的类。
IP/TCP传输:有序,规则,稳定安全。但速度较慢。
服务端:
- package tcp_ip;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- * tcp/ip传输 服务器端
- * @author Administrator
- *
- */
- public class Server {
- public static void main(String[] args) throws IOException {
- //创建服务器端socket
- ServerSocket serverSocket = new ServerSocket(9999);
- //创建指定端口的serverSocket后 设置监听状态! 会阻塞
- System.out.println("socket服务端启动成功!正在监听9999端口......");
- Socket socket = serverSocket.accept();
- //成功接收到请求后会返回一个socket
- InputStream is = socket.getInputStream();
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader reader = new BufferedReader(isr);
- String data = reader.readLine();
- while(data!=null&&!data.equals("")){
- System.out.println(data);
- data=reader.readLine();
- }
- reader.close();
- isr.close();
- is.close();
- socket.close();
- }
- }
客户端:
- package tcp_ip;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- public class Client {
- public static void main(String[] args) throws Exception {
- //创建client客户端指定目标ip及端口 (即目标socket)
- Socket socket = new Socket("localhost", 9999);
- //或者这个socket的输出流
- OutputStream outputStream = socket.getOutputStream();
- OutputStreamWriter writer = new OutputStreamWriter(outputStream);
- writer.write("我是客户端,我发送给你的内容是"+"你好啊!服务端!");
- writer.close();
- outputStream.close();
- socket.close();
- }
- }
//多线程版本:
服务端:
- package tcp_ip;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class ServerThread {
- public static void main(String[] args) throws IOException {
- //创建服务器端socket
- ServerSocket serverSocket = new ServerSocket(9999);
- //创建指定端口的serverSocket后 设置监听状态! 会阻塞
- System.out.println("socket服务端启动成功!正在监听9999端口......");
- while(true){
- Socket socket = serverSocket.accept();
- new RunThread(socket).start();
- }
- }
- }
客户端:
- package tcp_ip;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- public class Client {
- public static void main(String[] args) throws Exception {
- //创建client客户端指定目标ip及端口 (即目标socket)
- Socket socket = new Socket("localhost", 9999);
- //或者这个socket的输出流
- OutputStream outputStream = socket.getOutputStream();
- OutputStreamWriter writer = new OutputStreamWriter(outputStream);
- writer.write("我是客户端,我发送给你的内容是"+"你好啊!服务端! 又给你发啦~~");
- writer.close();
- outputStream.close();
- socket.close();
- }
- }
UDP传输:无序,不规则,不安全,速度快。
服务端:
- package udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- /**
- * udp客户端
- * @author Czt
- *
- */
- public class Client {
- public static void main(String[] args) {
- try {
- String data=new String("你好啊!----来自客户端的消息!".getBytes(),"utf-8");
- DatagramPacket datagramPacket = new DatagramPacket(data.getBytes(),data.length(),InetAddress.getLocalHost(),7788);
- DatagramSocket socket = new DatagramSocket();
- socket.send(datagramPacket);
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SocketException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
客户端:
- package udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- /**
- * udp客户端
- * @author Czt
- *
- */
- public class Client {
- public static void main(String[] args) {
- try {
- String data=new String("你好啊!----来自客户端的消息!".getBytes(),"utf-8");
- DatagramPacket datagramPacket = new DatagramPacket(data.getBytes(),data.length(),InetAddress.getLocalHost(),7788);
- DatagramSocket socket = new DatagramSocket();
- socket.send(datagramPacket);
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SocketException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
JAVA Socket基础(简单实现)的更多相关文章
- java Socket实现简单在线聊天(二)
接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...
- java Socket实现简单在线聊天(一)
最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持 ...
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- java Socket实现简单在线聊天(三)
在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...
- Java Socket 基础例子
1.服务器端代码 package com.lanber.socket; import java.io.DataInputStream; import java.io.DataOutputStream; ...
- Java Socket基础[备忘]
1.服务端----Server.java import javax.swing.*; import java.io.*; import java.net.*; import java.awt.*; i ...
- java socket 基础操作
服务端: public class Server { public static void main(String[] args) throws Exception { //1.创建一个服务器端Soc ...
- Java Socket发送与接收HTTP消息简单实现
在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构 ...
- 基于JAVA Socket的底层原理分析及工具实现
前言 在工作开始之前,我们先来了解一下Socket 所谓Socket,又被称作套接字,它是一个抽象层,简单来说就是存在于不同平台(os)的公共接口.学过网络的同学可以把它理解为基于传输TCP/IP协议 ...
随机推荐
- 构建更好的HashMap
在7月份的那期 Java理论与实践(“并发集合类”)中,我们简单地回顾了可伸缩性的瓶颈,并讨论了怎么用共享数据结构的方法获得更高的并发性和吞吐量.有时候学习的最好方法是分析专家的成果,所以这个月我们将 ...
- linux svn co 重新迁出
在linux环境下,使用svn co (即svn checkout) 报svn: Authorization failed错误, 使用svn co svn://localhost/temp.cc /d ...
- mysql null与not null
http://blog.csdn.net/fwkjdaghappy1/article/details/7703974/ NULL表示 值 可为NULL,并非空的意思, NOT NULL表示 值不能为N ...
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...
- RTC实时时钟驱动
RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去. RTC通过STRB/LDRB这两个ARM指令向CP ...
- 【重点突破】—— Vue1.0到Vue2.0的变化
前言: 本文参考作者:_So_ 和 我是某慧 的博文,重点梳理Vue1.0升级到Vue2.0后在开发中要注意的不同,以做学习. 组件模板不再支持片段代码,必须有一个顶级元素包裹,例如: ...
- linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别
这3个命令的用途都是启动网络接口,不过,ifup与ifdown仅就 /etc/sysconfig/network- scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修 ...
- swfit各种Function表现形式
//: Playground - noun: a place where people can play import UIKit //多返回值函数 func countss(string: Stri ...
- PHP增加$_ENV变量
在日常开发过程中,我们常常会将一些系统或模块配写在配置文件里.这样便于程序维护与修改.通常的配置文件有.ini , .xml等.配置文件的好处在于:1,便于管理.2,可读性高.但是,使用配置文件也会有 ...
- Spring学习五----------Bean的配置之Bean的生命周期
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...