学习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基础(简单实现)的更多相关文章

  1. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

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

    最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持 ...

  3. 【Socket】Java Socket基础编程

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  4. java Socket实现简单在线聊天(三)

    在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...

  5. Java Socket 基础例子

    1.服务器端代码 package com.lanber.socket; import java.io.DataInputStream; import java.io.DataOutputStream; ...

  6. Java Socket基础[备忘]

    1.服务端----Server.java import javax.swing.*; import java.io.*; import java.net.*; import java.awt.*; i ...

  7. java socket 基础操作

    服务端: public class Server { public static void main(String[] args) throws Exception { //1.创建一个服务器端Soc ...

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

    在上次Java Socket现实简单的HTTP服务我 们实现了简单的HTTP服务,它可以用来模拟HTTP服务,用它可以截获HTTP请求的原始码流,让我们很清楚的了解到我们向服务发的HTTP消息的结 构 ...

  9. 基于JAVA Socket的底层原理分析及工具实现

    前言 在工作开始之前,我们先来了解一下Socket 所谓Socket,又被称作套接字,它是一个抽象层,简单来说就是存在于不同平台(os)的公共接口.学过网络的同学可以把它理解为基于传输TCP/IP协议 ...

随机推荐

  1. NIO2.0之copy、delete和move

    转自:http://www.importnew.com/15884.html Java 7引入了NIO.2,NIO.2是继承自NIO框架,并增加了新的功能(例如:处理软链接和硬链接的功能).这篇帖子包 ...

  2. TCO 2015 Round 2A DIV1

    ModModMod 傻逼数论 题意: 这是一道卖萌的题..给你一个取模序列$m$,令$f(x)=(\cdots (x\ mod\ m[0])\ mod m[1])\mod m[2]\cdots $,问 ...

  3. Longest Valid Parentheses - LeetCode

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  4. luogu P2949 [USACO09OPEN]工作调度Work Scheduling

    题目描述 Farmer John has so very many jobs to do! In order to run the farm efficiently, he must make mon ...

  5. NOIP2016模拟赛三 Problem B: 神奇的树

    题面 Description 有一棵神奇的树.这棵树有N个节点,在每个节点上都有宝藏,每个宝藏价值V[i]金币:对于每条边,每经过一次都要花费C[i]金币. 值得注意的是,每个宝藏只能领取一次(也可以 ...

  6. 改变Ubuntu控制台字体大小(转)

    输入 sudo dpkg-reconfigure console-setup 选择一个适合的字体和字号即可. 参考: http://www.codeweblog.com/%E6%94%B9%E5%8F ...

  7. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  8. VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题

    .只要是“建立项目的时候不应建立空项目,而应当建立一个“win32控制台应用程序”.这样确实可以解决问题.只要你选择的是这个"win32控制台应用程序"则在附加选项里面选不选上“空 ...

  9. HDU 5402 Travelling Salesman Problem(多校9 模拟)

    题目链接:pid=5402">http://acm.hdu.edu.cn/showproblem.php?pid=5402 题意:给出一个n×m的矩阵,位置(i.j)有一个非负权值. ...

  10. JAVA使用外部字体将文字生成图片,并使用FontMetrics居中文字

    需求: 1.用户输入文字,根据外部字体,将文字生成图片 2.输出的文字需要居中在图片中显示 遇到的问题: 1.如何导入外部字体?使用Java的Font类,所有的字体都是系统安装过的 2.每次用户输入的 ...