Socket编程:(一般的网络编程)

  <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket.

  <2> Socket 通常用来实现 Client-Server 连接.

  <3> java.net 包中定义的两个类 Socket 和 ServerSocket(阻塞式), 分别用来实现双向连接的 Client 和 Server 端. 

  <4> 建立连接时, 所需的寻址信息为远程计算机的 IP 地址和端口号(Port number, 2个字节, 65536个端口, 一个应用程序可能有多个端口号)

    TCP端口、UDP端口分开的, 在技术上来讲, 只有TCP才分 Server 、Client.

    每一个有65536个端口, 端口号用来区分同一台机器上的不同应用程序, 一个人占用了某个端口号, 其他人就不能占了.

    自己编写程序的话, 占1024以后的端口号, 1024以前的不要占, 系统可能会随时征用.

    TCP、UDP二者是不一样的.

  <5> 默认的网页 http 端口为 80端口;

    SMTP(邮件发送):25端口

    POP3(接收邮件):110端口

  <6> 写 TCPserver、TCPclient 程序时, 首先启动 Server, 再启动 Client, 同时写程序, 一起开发.

Demo_1:

Server端:

import java.io.*;
import java.net.*;
public class TCPserver {
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(6666);
while(true){
Socket s = ss.accept();
System.out.println("A client connect: ");
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF()); //阻塞式(readUTF), 死死地等待
dis.close();
s.close();
}
}
}

Client端:

import java.net.*;
import java.io.*;
public class TCPclient {
public static void main(String[] args) throws Exception{
Socket s = new Socket("192.168.56.1", 6666);
OutputStream os = s.getOutputStream(); //拿到输出的那根管道, 往里面写
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("Hello Server");
dos.flush();
dos.close();
s.close();
}
}

运行结果:

A client connect:

Hello Server

Demo_2:

Server端:

import java.net.*;
import java.io.*;
public class TestServer {
public static void main(String[] args) {
try {
Socket s1 = new Socket("192.168.56.1", 8888);
InputStream is = s1.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
dis.close();
s1.close();
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("错误端口号, 请核对------");
} catch (IOException e) {
e.printStackTrace();
}
}
}

Client端:

import java.net.*;
import java.io.*;
public class TestClient {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
while(true){
Socket s1 = ss.accept();
OutputStream os = s1.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("Hello, "+s1.getInetAddress()+"Port#, "+s1.getPort()+"Bye--Bye");
dos.close();
os.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("程序出错啦:"+e);
} }
}

运行结果:Hello, /192.168.56.1Port#, 4391Bye--Bye

Demo_3:

import java.net.*;
import java.io.*;
public class TestSockServer {
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
try {
ServerSocket ss = new ServerSocket(5888);
Socket socket = ss.accept();
in = socket.getInputStream();
os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(in);
DataOutputStream dos = new DataOutputStream(os);
String s = null;
if((s=dis.readUTF())!=null){
System.out.println(s);
System.out.println("From: "+socket.getInetAddress());
System.out.println("Port: "+socket.getPort());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Client端:

import java.net.*;
import java.io.*;
public class TestSockClient {
public static void main(String[] args) {
InputStream is = null;
OutputStream os = null;
try {
Socket socket = new Socket("192.168.56.1", 5888);
is = socket.getInputStream();
os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("Hey");
String s = null;
if((s = dis.readUTF())!=null){
System.out.println(s);
}
dos.close();
dis.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

运行结果:

Hey
From: /192.168.56.1
Port: 4531

Demo_4:

Server 端:

import java.net.*;
import java.io.*;
public class TalkServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(4702);
Socket socket = server.accept();
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream());
System.out.println("Client: "+is.readLine());
String line = null;
line = sin.readLine();
while(!line.equalsIgnoreCase("Bye")){
pw.println(line);
pw.flush();
System.out.println("Client: "+is.readLine());
line = sin.readLine();
}
is.close();
pw.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Client 端:

import java.net.*;
import java.io.*;
public class TalkClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("192.168.56.1", 4702);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
String readLine = null;
readLine = sin.readLine();
while(!readLine.equalsIgnoreCase("Bye")){
os.println(readLine);
os.flush();
System.out.println("Servber: "+is.readLine());
readLine = sin.readLine();
}
os.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

运行结果展示:

Java中的网络编程-2的更多相关文章

  1. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  2. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  3. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  4. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  5. JAVA中-面向网络编程---单层交互

    面向网络编程---单层交互: 客户端说明: /* * 实现TCP客户端,链接到服务器 * 和服务器实现数据交互 * 实现TCP客户端的类 java.net.Scoket * 构造方法: * Socke ...

  6. Java中的网络编程-3

    用户数据协议(UDP)是网络信息传输的另外一种形式, 基于UDP的通信不同于基于TCP的通信, 基于UDP的信息传递更快, 但是不提供可靠的保证. 使用UDP传输数据时, 用户无法知道数据能否正确地到 ...

  7. Java中的网络编程-1

    计算机网络:将分布在不同地区的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统, 从而使众多计算机 可以方便的互相传递信息, 共享硬件.软件.数据信息等资源. 计算机网络的主要功能: ...

  8. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  9. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

随机推荐

  1. [译]C语言实现一个简易的Hash table(5)

    上一章中,我们使用了双重Hash的技术来处理碰撞,并用了C语言实现,贲张我们将实现Hash表中的插入.搜索和删除接口. 实现接口 我们的hash函数将会实现如下的接口: // hash_table.h ...

  2. 如何使用yii2的缓存依赖特性

    目录 如何使用yii2的缓存依赖特性 概述 页面缓存 缓存依赖 链式依赖 总结 如何使用yii2的缓存依赖特性 概述 缓存是Yii2的强大特性之一,合理使用缓存技术可以有效地减小服务器的访问压力.Yi ...

  3. HBase(3)-安装与Shell操作

    一. 安装 1. 启动Zookeeper集群 2. 启动Hadoop集群 3. 上传并解压HBase -bin.tar.gz -C /opt/module 4. 修改配置文件 #修改habse-env ...

  4. python+MongoDB使用示例

    本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...

  5. 20155220 2016-2017-2 《Java程序设计》第10周学习总结

    20155220 2016-2017-2 <Java程序设计>第10周学习总结 教材内容学习总结 计算机网络编程概述 路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控 ...

  6. 20155231 2016-2017-2 《Java程序设计》第3周学习总结

    20155231 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封 ...

  7. 20155316 实验一《Java开发环境的熟悉》实验报告

    一.命令行下Java程序的开发 按照老师提供的步骤,运行程序如下: 二.IDEA下Java程序开发.调试 设置条件断点如下: 三.练习题 实现四则运算,并进行测试 实现效果:实现任意两个整数的加减乘除 ...

  8. 2017-2018-1 20155321 《信息安全系统设计基础》课堂实践——实现mypwd

    2017-2018-1 20155321 <信息安全系统设计基础>课堂实践--实现mypwd 学习pwd命令 pwd命令:输出当前工作目录的绝对路径 还可通过man pwd具体查看pwd的 ...

  9. 考研编程练习----swap

    void swap(int a ,int b) { a^=b; b^=a;  //b =b^a^b //b = b^b^a;//b = a;  按位异或满足交换律 a^=b; //a = a^b^a ...

  10. win32api 找不到指定的模块

    pywin32 安装后 import win32api 出现ImportError: DLL load failed: 找不到指定的模块 解决方法: 拷贝 C:\Python26\Lib\site-p ...