您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java Socket实战编程指南

时间:2020-06-05 12:57:04  来源:  作者:

本文介绍了一种非常基本的单向客户端和服务器设置,其中客户端连接,将消息发送到服务器,并且服务器使用Socket连接显示消息。要使这些功能正常工作,需要进行很多底层操作,但是JAVA API网络软件包(java.NET)会处理所有这些工作,从而使程序员的网络编程变得非常容易。

Java Socket实战编程指南
 
 
 

客户端编程

建立Socket连接

要连接到其他机器,我们需要一个Socket连接。Socket连接意味着两台机器具有有关彼此的网络位置(IP地址)和TCP端口的信息。java.net.Socket类表示一个Socket。打开socket:

Socket socket = new Socket(“127.0.0.1”, 5000)

第一个参数– 服务器的IP地址。(127.0.0.1是本地主机的IP地址,其中代码将在单个独立计算机上运行)。

第二个参数– TCP端口。(只是一个数字,表示要在服务器上运行哪个应用程序。例如,HTTP在端口80上运行。端口号可以从0到65535)

Java Socket实战编程指南
 
 
 

通讯

为了通过Socket连接进行通信,流被用于输入和输出数据。

断开连接

发送到服务器的消息后,Socket连接将明确关闭。

在程序中,客户端不断读取用户的输入并将其发送到服务器,直到键入“ Over”为止。

Java Socket实战编程指南
 
 
 

Java实现

// A Java program for a Client

import java.net.*;

import java.io.*;

 

public class Client

{

// initialize socket and input output streams

private Socket socket = null;

private DataInputStream input = null;

private DataOutputStream out = null;

 

// constructor to put ip address and port

public Client(String address, int port)

{

// establish a connection

try

{

socket = new Socket(address, port);

System.out.println("Connected");

 

// takes input from terminal

input = new DataInputStream(System.in);

 

// sends output to the socket

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

 

// string to read message from input

String line = "";

 

// keep reading until "Over" is input

while (!line.equals("Over"))

{

try

{

line = input.readLine();

out.writeUTF(line);

}

catch(IOException i)

{

System.out.println(i);

}

}

 

// close the connection

try

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

 

public static void main(String args[])

{

Client client = new Client("127.0.0.1", 5000);

}

}

Java Socket实战编程指南
 
 
 

服务器编程

建立Socket连接

要编写服务器应用程序,需要两个Socket。

等待客户端请求的ServerSocket(客户端创建新的Socket()时)

一个普通的旧SocketSocket,用于与客户端进行通信。

Java Socket实战编程指南
 
 
 

通讯

getOutputStream()方法用于通过Socket发送输出。

关闭连接

完成后,重要的是通过关闭Socket以及输入/输出流来关闭连接。

// A Java program for a Server

import java.net.*;

import java.io.*;

 

public class Server

{

//initialize socket and input stream

private Socket socket = null;

private ServerSocket server = null;

private DataInputStream in = null;

 

// constructor with port

public Server(int port)

{

// starts server and waits for a connection

try

{

server = new ServerSocket(port);

System.out.println("Server started");

 

System.out.println("Waiting for a client ...");

 

socket = server.accept();

System.out.println("Client accepted");

 

// takes input from the client socket

in = new DataInputStream(

new BufferedInputStream(socket.getInputStream()));

 

String line = "";

 

// reads message from client until "Over" is sent

while (!line.equals("Over"))

{

try

{

line = in.readUTF();

System.out.println(line);

 

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println("Closing connection");

 

// close connection

socket.close();

in.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

 

public static void main(String args[])

{

Server server = new Server(5000);

}

}

重要事项

服务器应用程序在特定的端口5000上创建一个ServerSocket。这将启动我们的服务器,以侦听端口5000传入的客户端请求。

然后,服务器创建一个新的Socket以与客户端进行通信。

socket = server.accept()

accept()方法会阻塞(只是坐在那里),直到客户端连接到服务器为止。

然后,我们使用getInputStream()方法从Socket获取输入。我们的服务器一直在接收消息,直到客户端发送“结束”为止。

完成后,我们通过关闭Socket和输入流来关闭连接。

要在计算机上运行客户端和服务器应用程序,请同时编译它们。然后,首先运行服务器应用程序,然后运行客户端应用程序。

在终端或命令提示符上运行

打开两个窗口,一个用在服务器,另一个用在客户端

1.首先以方式运行Server应用程序

$ java Server

服务器开始

等待客户端…

2.然后,在另一个终端上运行客户端应用程序,如下所示:

$ java Client

它将显示–已连接,并且服务器接受客户端并显示

3.然后,您可以开始在“客户端”窗口中键入消息。这是给客户的样本输入

Hello

I made my first socket connection

Over

服务器同时接收并显示的内容,

Hello

I made my first socket connection

Over

Closing connection

请注意,发送“ Over”将关闭客户端和服务器之间的连接,就像之前所说的那样。

如果您使用的是Eclipse或类似的工具,

在两个不同的终端或选项卡上编译它们两者

首先运行服务器程序

然后运行客户端程序

在客户端窗口中键入消息,服务器窗口会同时接收并显示这些消息。

键入结束。



Tags:Java Socket   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文介绍了一种非常基本的单向客户端和服务器设置,其中客户端连接,将消息发送到服务器,并且服务器使用Socket连接显示消息。要使这些功能正常工作,需要进行很多底层操作,但是Java...【详细内容】
2020-06-05  Tags: Java Socket  点击:(64)  评论:(0)  加入收藏
▌简易百科推荐
本文的目的是演示一个专门设计用于对收据照片执行OCR(光学字符识别)操作并自动从中提取关键业务信息的 API,例如企业名称和地址、电话号码、收据总额等等。在页面的下方,我提供...【详细内容】
2022-07-15  qaseven    Tags: OCR   点击:(2)  评论:(0)  加入收藏
StackOverflowError 可能会让Java开发人员感到恼火,因为它是我们可能遇到的最常见的运行时错误之一。在本文中,我们将通过查看各种代码示例以及如何处理它来了解此错误是如何...【详细内容】
2022-07-14  java程序猿    Tags:StackOverflowError   点击:(4)  评论:(0)  加入收藏
写在前面无意中看到ch1ng师傅的文章觉得很有趣,不得不感叹师傅太厉害了,但我一看那长篇的函数总觉得会有更骚的东西,所幸还真的有,借此机会就发出来一探究竟,同时也不得不感慨下R...【详细内容】
2022-07-13  江江111  今日头条  Tags:waf 绕过   点击:(4)  评论:(0)  加入收藏
今早,看到CSDN里推荐的Python获取女朋友发来加班拍照定位地址是酒店的段子,本来准备验证下,顺便练练手的,最后,安装执行pip install json报没有指定版本号。一怒之下搞我大JAVA,验...【详细内容】
2022-07-12  java小悠    Tags:Java 技术   点击:(8)  评论:(0)  加入收藏
核心代码:import java.util.Map;import java.util.List;import java.util.Iterator;import java.util.ArrayList;import java.io.IOException;import java.io.InputStream;im...【详细内容】
2022-07-12  编程课堂    Tags:Java Post   点击:(10)  评论:(0)  加入收藏
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看。题目很简单:给定一个日期,然后计算下距离今天相差的天数。本以为这么个问题就是用来活跃面试...【详细内容】
2022-07-11  架构悟道    Tags:JAVA   点击:(11)  评论:(0)  加入收藏
跳表是一种数据结构,用于借助连接到元素子序列的链表层次结构来存储元素的排序列表。跳表允许以有效的方式处理项目查找。跳表是一种概率数据结构,这意味着它跳过整个列表中的...【详细内容】
2022-07-08  java程序猿    Tags:跳表   点击:(13)  评论:(0)  加入收藏
概述背景是不是在实际开发工作当中经常碰到自己写的代码在开发、测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很...【详细内容】
2022-07-08  程序猿的自述    Tags:Arthas   点击:(16)  评论:(0)  加入收藏
我之前分享了Java和Go语言版本的gRPC接口的服务端和客户端的开发,使用的基本都是基础的原声API,旧文如下: Grpc服务开发和接口测试初探【Java】 2022-04-20 gRPC服务开发和接口...【详细内容】
2022-07-07  FunTester    Tags:gRPC   点击:(16)  评论:(0)  加入收藏
Linux下启动Java程序的脚本程序startup.sh#!/bin/bashnohup java -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx512m -XX:MetaspaceSize=128M -XX:MaxMetaspaceSi...【详细内容】
2022-07-07  精科研习    Tags:Java   点击:(23)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条