`

java网络编程socket

阅读更多
网络通信基本概念
协议:协议是一组在网络上发送信息的规则和约定。这些规则控制在网络设备间交换消息的内容、格式、定时、顺序和错误控制。
IP:在Internet上有千百万台主机,为了区分这些主机,人们给每台主机都分配了一个专门的地址,称为IP地址。
      32 位数字,四个用点号分隔的数字
      包括网络 ID 和主机 ID
      网络的类包括 A、B、C、D、E 类
DNS:ip地址都是数字,太难记
       DNS将 IP 地址映射至字符串
       映射由域名服务器系统维护
端口:有别于设备端口,是用来理解的逻辑概念
      用于实现程序间的通信
      常用的端口

-----------------------------------------------------------------------------------------------------------------------

URL:URL(Uniformed Resource Location) 指向Internet 上的资源文件
URL 类提供 API 来访问 Internet 上的信息
构造方法
URL(String urlname)
URL(String protocol, String hostname, int port, String path)
URL(String protocol, String hostname, String path)
URLConenction openConnection()
URLConnection:
      抽象类
用于封装由 URL 表示的 Web 对象的连接
提供进一步了解远程资源的方法
InputStream getInputStream()
OutputSteam getOutputStream()
InetAddress:
      InetAddress 的实例包含 IP 地址,还可能包含相应的主机名。
工厂方法用于创建实例
InetAddress getLocalHost()
InetAddress getByName(String host)
InetAddress[] getAllByName(String host)
      取本机计算机名及所有IP地址:
      此类表示互联网协议 (IP) 地址
      InetAddress addr = InetAddress.getLocalHost();
String hostName = addr.getHostName();//取得本机机器的名字
InetAddress[] addrs = InetAddress.getAllByName(hostName);
//保存ip的数组
String [] allIp = new String[addrs.length];
for(int i = 0; i < addrs.length; i++)
addrs[i] = addrs[i].getHostName();

-------------------------------------------------------------------------------------------------------------------------------

SOCKET通信过程:

ServerSocket服务器和客户端


什么是TCP?

TCP(传输控制协议)是一种基于流的网络通讯方法,它与其它的任何协议都有很大的不同。TCP提供的网络通讯接口与UDP(用户数据报协议)截然不同:
基于UPD与基于TCP相比,基于UDP的通信传输速度更快;
但基于UDP的通信不能提供可靠性,即发出的信息接收方不一定收到,发出信息的顺序与接收的顺序不一定相同。

TCP通信过程:

我们可以将基于TCP的通信比做打电话;一方负责监听,一方负责呼叫,呼叫的一方为客户端,监听的一方为服务器端。
服务器端socket绑定于特定端口,服务器侦听socket等待连接请求
客户端向服务器和特定端口提交连接请求 
服务器接受连接,产生一新的socket,绑定到另一端口,由此socket来处理和客户端的交互,服务器继续侦听原socket来接受其他客户端的连接请求
连接成功后客户端也产生一socket,并通过它来与服务器端通讯(注意:客户端socket并不与特定端口绑定)
服务器端和客户端就通过读取和写入各自的socket来进行通讯。

ServerSocket:
此类实现服务器套接字
构造方法
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress bindAddr)
Socket accept() 侦听并接受到此套接字的连接
Socket:
实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器之间的通信端点
构造方法
Socket(InetAddress address, int port)
Socket(String host, int port)
通信要用到的常用方法
InputStream getInputStream() 
OutputStream getOutputStream()


Socket通讯过程:
  服务器端:
1.建立服务端ServerSocket 表示对客户端连接感兴趣:
  ServerSocket server = new ServerSocket(8321);
2.监听客户端连接:
Socket socket = server.accept();
4.当客户端连接上来之后就可以获得流开始通信了
OutputStream os = socket.getOutputStream();
  InputStream is = socket.getInputStream();
  可以对输入输出流进行套接以便发送不同的数据。
客户端: 
3.建立客户端Socket连接到服务端ServerSocket
    Socket socket = new Socket("127.0.0.1",8321);
  5.通过Socket得到输入输出流就可以和服务器通信了
    InputStream is = socket.getInputStream();
  OutputStream os = socket.getOutputStream();
    可以对输入输出流进行套接以便发送不同的数据
   
    注意:
        客户端和服务器,输入输出流的先后顺序
   
-----------------------------------------------------------------------------------------------------------------------------------
服务端:

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {
	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		Socket socket = null;
		try {
			// 1创建ServerSocket
			serverSocket = new ServerSocket(8099);

			System.out.println("服务器已经启动.....");
			// 2监听客户端Socket的连接
			socket = serverSocket.accept();
			//socket.getInetAddress()
			// 3获取输出流
			OutputStream outputStream = socket.getOutputStream();
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(
					outputStream);
			// 发送消息
			String msg = "您好,您已经连接上了服务器!";
			objectOutputStream.writeObject(msg);
			objectOutputStream.flush();

			// 接收来自客户端的消息

			// 获取输入流
			InputStream inputStream = socket.getInputStream();
			ObjectInputStream objectInputStream = new ObjectInputStream(
					inputStream);
			// 获取来自服务端的消息
			String msgFromClient = objectInputStream.readObject().toString();
			System.out.println("客户端》》服务端:" + msgFromClient);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}



客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TestClient {
	public static void main(String[] args) {
		// 创建客户端Socket
		Socket socket = null;
		try {
			socket = new Socket("127.0.0.1", 8099);
			// 获取输入流
			InputStream inputStream = socket.getInputStream();
			ObjectInputStream objectInputStream = new ObjectInputStream(
					inputStream);
			// 获取来自服务端的消息
			String msg = objectInputStream.readObject().toString();
			System.out.println("服务端》》客户端:" + msg);
			
			// 3获取输出流
			OutputStream outputStream = socket.getOutputStream();
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(
					outputStream);
			// 发送消息
			String msgToServer = "我这真的连接上了吗??!";
			objectOutputStream.writeObject(msgToServer);
			objectOutputStream.flush();

		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

分享到:
评论

相关推荐

    java网络编程socket可视化

    在本项目"java网络编程socket可视化"中,我们将探讨如何使用Java Socket API创建一个简单的服务器,以及与其交互的客户端应用,同时实现数据的可视化展示。 首先,我们需要理解Socket的工作原理。Socket是网络上的...

    java网络编程 socket

    Java网络编程是构建分布式应用程序的关键技术,而Socket是其核心组件。本文将深入探讨Java中的Socket编程,包括基本概念、工作原理以及实际应用。 一、Socket基础 Socket,中文常称为“套接字”,是网络通信中的...

    Java网络编程socket通讯简单封装(使用多线程)_20170808_LK

    在这个主题中,“Java网络编程socket通讯简单封装(使用多线程)”着重讨论了如何在Java中使用Socket进行基本的网络通信,并通过多线程提升并发处理能力。 首先,Socket在Java中的实现主要依赖于`java.net.Socket`和`...

    Java网络编程socket

    Java网络编程中的Socket是连接应用程序与网络协议的重要接口,它提供了低级别的TCP/IP通信机制。在Java中,Socket编程主要用于实现客户端(Client)与服务器端(Server)之间的双向通信。本篇文章将深入探讨Java ...

    Java网络编程socket多线程下载带界面

    Java网络编程中的Socket多线程下载...以上就是“Java网络编程socket多线程下载带界面”项目的核心知识点。通过这个项目,开发者不仅可以学习到网络编程的基本原理,还能深入理解多线程和GUI编程在实际应用中的结合。

    java网络编程socket编程等

    Socket编程是网络编程的基础,是Java实现网络通信的核心技术。本文将深入探讨Java网络编程和Socket编程的相关知识点。 一、Java网络编程基础 Java网络编程主要涉及TCP/IP协议族,包括TCP(传输控制协议)和UDP...

    JAVA 网络编程socket客户端

    JAVA 网络编程socket客户端,跟server端通信的比较好的client例程

    java网络编程socket非阻塞通信

    通过java网络编程深入理解socket阻塞通信和非阻塞通信的在网络中的应用 源码包每一行都有注释,在代码里面每一个类都有详细的注释来解释这个类的功能这个方法的功能,调用哪一个类的哪一个功能等等。 压缩包包含实验...

    Java网络编程 Socket编程

    Java网络编程是使用Java语言编写网络应用程序的过程,而Socket编程是实现Java网络编程的一种重要手段。本篇将详细解析Java网络编程中Socket编程的关键知识点,包括TCP实现、多线程在Socket编程中的应用、UDP程序的...

    java网络编程 socket的TCP应用编程

    - Java Socket类和ServerSocket类是进行TCP网络编程的核心API。 - ServerSocket用于创建服务器端的套接字,监听特定端口的连接请求。 - Socket用于创建客户端的套接字,与服务器建立连接。 3. **服务端编程**: ...

    Java Socket网络编程.pdf

    Java Socket网络编程是Java平台中的核心特性,它为开发者提供了在TCP/IP协议下创建网络应用的能力。Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动...

    Java网络编程案例教程习题参考答案 .pdf

    Java_network_programming是Java编程语言中一个基础组件,用于实现网络通信。以下是Java网络编程案例教程习题参考答案中涉及到的知识点: 1. Socket编程:Socket是Java网络编程中最基本的组件,用于实现网络通信。...

    基于Java 网络编程 Socket 和图形界面 Swing 以及数据访问 JDBC 实现的一个简单的仿QQ在线聊天.zip

    首先,Java网络编程的核心是Socket。Socket是TCP/IP协议的一部分,它允许两台计算机通过网络进行通信。在这个项目中,Socket用于建立客户端和服务器之间的连接,实现消息的发送与接收。客户端通过Socket连接到服务器...

    Java网络编程实验报告.pdf

    Java 提供了多种网络编程接口,包括Socket 编程、DatagramPacket 编程、URL 编程等。 知识点2:Socket 编程 Socket 编程是Java 网络编程中最基础的编程接口。Socket 是一个EndPoint,用于在网络上建立连接,实现...

    JAVA_网络编程_Socket

    http://blog.csdn.net/two_water/article/details/51536242 博客Demo!

    java网络编程Socket(基础)demo

    demo实现了客户端和服务端相互发送消息,实现了client/services(cs)通信模型。

    Java网络编程/Java网络编程实例

    1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过ServerSocket创建服务器端,Socket创建客户端,两者建立连接后可以进行双向数据传输。例如,你可以构建一个简单的聊天应用或文件...

Global site tag (gtag.js) - Google Analytics