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();
        }

    }
}
时间: 2024-08-05 13:58:54

JAVA Socket基础(简单实现)的相关文章

java Socket实现简单在线聊天(一)

出处:http://blog.csdn.net/tuzongxun 最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持续发送消息: 2.结合线程,实现多客户端连接服务端发送消息: 3.实现服务端转发客户端消息至所有客户端,同时在客户端显示: 4.把awt组件生成的窗口界面改成前端jsp或者html展示的界面,java socket实现的客户端改为前

【Socket】Java Socket基础编程

Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基本示例 二.消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过Socket关闭输出流的方式 2.3.3 通过约定符号 2.3.4 通过指定长度 三.服务端优化 3.1 服务端并发处理能力 3.2

Java Socket基础

一:两种传输协议 TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作. UDP是User Datagra

Java Socket 基础例子

1.服务器端代码 package com.lanber.socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { /** * 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,

java socket编程简单样例(客户端+服务器)

//客户端 package test; import java.io.*; import java.net.*; import java.applet.Applet; public class TalkServer{ public static void main(String args[]) { try{ ServerSocket server=null; try{ server=new ServerSocket(4700); //创建一个ServerSocket在端口4700监听客户请求 }

java Socket通信简单实例

import java.io.*; import java.net.*; public class ClientTest { public static void main(String[] args) throws Exception { Socket s = new Socket("localhost", 8888); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(&qu

Java Socket发送与接收HTTP消息简单实现

在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构,对HTTP请求消息有个清晰的认识.这一节我想写了一个客户的程序,就是用来模拟浏览器,用来向服务器发送HTTP请求,最得要的是可以用它来显示服 务器发回来的HTTP响应消息的一般结构. [java] view plaincopy import java.io.IOException; import 

Java Socket通讯---网络基础

java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛的协议 是以TCP/IP为基础的不同层次上多个协议的集合 也称TCP/IP协议簇 或 TCP/IP协议栈 TCP:Transmission Control Protocol, 传输控制协议 IP:Internet Protocol,互联网协议 1.3 TCP/IP模型 1.4 IP地址 为实现网络中

Java Socket编程基础(1)

参考资料: <Java网络编程精解> 孙卫琴 一.socket通信简介 什么是socket,简单来说,在linux系统上,进程与进程之间的通信称为IPC,在同一台计算机中,进程与进程之间通信可以通过信号.共享内存的方式等等. 不同计算机上的进程要进行通信的话就需要进行网络通信,而 socket通信就是不同计算机进程间通信中常见的一种方式,当然,同一台计算机也可以通过socket进行通信,比如mysql支持通过unix socket本地连接. socket在网络系统中拥有以下作用: (1) so