服务器

server.java

package socket;

import java.io.*;
import java.net.*;
public class server { public static void main(String args[]) {
try{
ServerSocket server=null; try{
//创建一个ServerSocket在端口4700监听客户请求
server=new ServerSocket(7217);
System.out.println("服务器已打开!");
}catch(Exception e){
e.printStackTrace();
} Socket socket=null; try{
//使用accept()阻塞等待客户请求,有客户
socket=server.accept();//请求到来则产生一个Socket对象,并继续执行
}catch(Exception e){
e.printStackTrace();//出错,打印出错信息
} //由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//从socket获取输入流并转换到输入流缓存,从这里可以读到从客户端发来的信息 //由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//同理的,输出流也是一个缓存,所以下面发送的话,
//可能会有延迟的,要立即发送就调用flush方法,
//它会立即清空缓存并把信息发出去 //向客户端输出该字符串
os.println("来自服务器的消息!");
//刷新输出流,使Client马上收到该字符串
os.flush(); //在标准输出上打印从客户端读入的字符串
System.out.println("收到客户端的信息:"+is.readLine()); os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
}catch(Exception e){
e.printStackTrace();//出错,打印出错信息
}
} }

客户端

client.java

package socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class client { public static void main(String[] args) {
try{ System.out.println("客户端已打开!"); Socket socket=new Socket("127.0.0.1",7217);//创建socket并连接本机的7217端口 PrintWriter os=new PrintWriter(socket.getOutputStream());//输出流,本机到服务器 BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//输入流,服务器到本机 System.out.println("收到来自服务器的消息:"+is.readLine()); os.println("这是来自客户端的消息!");//发送消息
os.flush();//推送 os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket }catch(Exception e){ e.printStackTrace();//出错,打印出错信息 } } }

运行效果

服务器输出:

服务器已打开!
收到客户端的信息:这是来自客户端的消息!

客户端输出:

客户端已打开!
收到来自服务器的消息:来自服务器的消息!

视频讲解

视频讲解

【Java】TCP套接字编程的更多相关文章

  1. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  2. UNP学习笔记1——基本TCP套接字编程

    1 套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议族都定义了自己的套接字结构.这些套接字的结构以sockaddr_开头,以每个协议族唯一的后缀名结尾. 1.1 I ...

  3. TCP套接字编程模型及实例

    摘要:     本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析. PS:本文权当 ...

  4. 初探网络编程--TCP套接字编程演示

    今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...

  5. 套接字编程相关函数(2:TCP套接字编程相关函数)

    本文摘录自<UNIX网络编程 卷1>. 基本套接字函数 socket函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.其定义如下: #in ...

  6. TCP套接字编程

    一.套接字(socket)函数 图1给出了在一个TCP客户与服务器通信的流程.服务器首先启动,稍后某个客户启动,它试图连接到服务器.假设客户给服务器发送一个请求,服务器处理该请求,并且给客户发回一个相 ...

  7. 【UNIX网络编程(二)】基本TCP套接字编程函数

    基于TCP客户/server程序的套接字函数图例如以下: 运行网络I/O.一个进程必须做的第一件事就是调用socket函数.指定期望的通信协议类型. #include <sys/socket.h ...

  8. <网络编程>基本TCP套接字编程

    tcp提供了可靠传输,当tcp向另一端发送数据的时候,要求对端返回一个确认.如果没有接收到确认,tcp就重传数据并且等待更长时间,数次重传失败后,tcp才放弃. 建立一个tcp连接会发生如下事情: 服 ...

  9. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

  10. unix网络编程第四章----基于TCP套接字编程

    为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...

随机推荐

  1. Mysql连接报错排查解决记录

    Mysql连接报错排查解决记录 背景: 系统:uos server-1060e ​ 运行环境kvm虚拟机 ​ mysql版本:5.7.44, for Linux (x86_64) 问题现象: 宿主机重 ...

  2. 记录小程序跳转h5,然后h5涉及下载文件的问题

    小程序跳转h5中,可以在小程序增加一个页面使用webView方式嵌套三方小程序,不过需要配置白名单 由于小程序的限制,不能在嵌套的h5中进行文件下载 网上也没有很好的解决方法,解决方法是再跳到小程序带 ...

  3. Note -「Lagrange 反演」记笔习学

      也许施工完成啦?   对于常数项为 \(0\),一次项非 \(0\) 的多项式 \(F,G\),定义复合运算 \(\circ\),满足 \[(F\circ G)(x)=F(G(x))=\sum_{ ...

  4. 项目PMP之三项目经理

    一.项目经理定义:由执行组织委派,领导实现目标 二.影响范围: 项目本身:相关方沟通.完善各职能结构:通过人际关系和沟通技能及积极态度充当沟通者,以平衡项目相关方并达成共识 组织:组织结构中进行积极沟 ...

  5. 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性

    title: 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性 date: 2025/1/16 updated: 2025/1/16 author: cmdragon excerpt: 数据 ...

  6. JVM:java虚拟机栈

  7. 2006. 差的绝对值为 K 的数对数目

    给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k . |x| 的值定义为: 如果 x &g ...

  8. 玩转云端 | 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!

    随着数字化转型深入推进,企业信息化建设成效显著,同时其所面临的安全与性能挑战也日趋复杂,既要确保业务系统的安全性,同时也要提供快速.流畅的用户体验,以提升用户满意度和业务竞争力. 在传统的解决方案中, ...

  9. mac 安装vue

    1.git clone https://github.com/vuejs/vue-devtools.git 切换master分支 cd vue-devtools npm install --regis ...

  10. 另辟新径实现 Blazor/MAUI 本机交互(二)

    Maui 基础 Preferences 是 .NET MAUI 提供的一个静态类,用于存储和检索应用程序的首选项(即设置或配置).它提供了一种简单的键值对存储机制,可以跨平台使用.每个平台使用其本地的 ...