java利用socket实现客户端与服务器的连接与数据传递

Java TCP使用Socket进行网络通信(4)之往返发送 本文演示,TCP使用Socket进行网络通信,实现客户端与服务器端数据的往返发送。 1)客户端,给服务器发送消息,并将接受到的服务器消息打印在客户端控制台上。 2)服务端,接受客户端消息,并打印在服务器开端控制台上,同事给客户端回复收到消息。 阅读详情

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个 socket。socket 也就是套接字,可以用来实现不同虚拟机或者不同计算机之间的通信。在 Java 语言中,socket 可以分为两种类型:面向连接的 socket 通信协议(TCP)和面向无连接的 socket 通信协议(UDP)。任何一个 socket 都是用 IP 地址与端口号唯一确定的。

基于 TCP 的通信过程如下:

首先,服务器端 Listen(监听)指定的某个端口是否有连接请求;其次,客户端想服务器端发出 Connect(连接) 请求;最后,服务器端向客户端返回 Accept(接受) 消息。一个连接就建立起来了,回话随即产生。服务器端与客户端都可以通过 Send,Write 等方法与对方通信。

Socket 的生命周期有三部分:打开 Socket,使用 Socket 收发的数据与关闭 Socket。在 Java  语言中,可以使用 ServerSocket 作为服务器端,Socket 作为客户端来实现网络通信。
 

这里我们为了简便,把客户端和服务器放到了一个包里面,最好是放在不同的工程里面!

首先我们来看服务器端的代码:

package 网络聊天;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class L1{
	public L1(){
		try{
			ServerSocket ss=new ServerSocket(9999);//设置服务器的端口
			System.out.println("服务器正在监听");
			Socket s=ss.accept();//只有服务器被客户连接之后,才会执行后面的语句
			//System.out.println("22");//验证是否连接成功
			InputStreamReader isr=new InputStreamReader(s.getInputStream());//接收客户端的数据
			BufferedReader br=new BufferedReader(isr);//存入缓存
			String xinxi=br.readLine();//读出
			System.out.println(xinxi);//打印数据
			PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//向客户端传数据
			pw.println("我是服务器");//数据是啥
			
		}catch(Exception e){


		}
	}
	public static void main(String args[]){
		L1 a=new L1();
	}
}

注释比较详细,我就不一一解释了

然后是客户端的代码

package 网络聊天;
import java.net.*;
import java.io.*;
public class L1_1 {
 public static void main(String[] args){
	 L1_1 a=new L1_1();
 }
 public L1_1(){
	 try{
		 Socket s=new Socket("127.0.0.1",9999);//进入端口,前面是服务器的Ip,自己电脑一般是127.0.0.1,后面的是端口,与服务器对应
	 PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//IO流发送
	 pw.println("我是客户端");//发送的内容
	 //pw.flush();
	 //s.shutdownInput();
	InputStream isr=s.getInputStream();//读取数据
	 BufferedReader br=new BufferedReader(new InputStreamReader(isr));//存到缓存区
	 String fanhui=br.readLine();//获取数据
	 System.out.println(fanhui);//输出数据
	 
	 }catch(Exception e){
		 
	 }
 }
}

代码都写好之后呢,我们运行一个服务器的代码,启动服务器,console输出如下:

此时服务器正在监听,等待客户端的链接

然后我们运行客户端的代码,与服务器进行连接,此时服务器的终端显示为:

这个表示连接成功啦,服务器接收到了客户端发的数据,然后客户端的终端显示为:

这个表示客户端收到了服务器的数据啦!

还有一个要注意的地方就是我们运行客户端代码的时候,终端会自动切换为客户端的,这个时候要查看服务器的终端则需要切换终端,如上图,点击那个黑色下拉小三角就可以切换啦!

笔者当时运行时没看到服务器的数据输出可把我急坏了,当时一直以为是代码的问题,真的是心塞!!!

好啦,这次就到这里啦,有问题可以和我留言哦!

邮箱:2321591758@qq.com

其他博客的链接:

Github个人网站      知乎      简书

欢迎各位访问哦,这次就到这里啦!

电脑作为服务器,安卓手机作为客户端,通过Socket传输图片 服务器端: 服务器使用java写的,由于开发用的android studio,所以新建一个android项目,但是选择 add no activity,进去后,new-javaclass. package com.example.picturesocket; /** * Created by ASUS on 2017/8/27. */ import java.io.Dat 阅读详情

相关推荐

基于Socket编程的交互式网络聊天室项目实战

一个基于Socket编程的交互式网络聊天室项目

qq_39663771的博客 2385

java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量

chenduxiu666的博客 5389

unity网络编程学习(4)与java服务器的Socket通信

前言 在上一篇博客中,我们通过unity中的www类来和web服务器进行数据的交互,所使用的方式就是http通信,那么http通信的原理是什么呢,socket通信原理又是什么呢,这里推荐两篇写的比较不错的博文:这里,还有这里。 http通信原理 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协

加蛋加蛋 5663

Java Socket Server TCP服务端向指定客户端发送消息

首先我们可以知道只有有客户端连接服务器就会生成一个socket对象,socket对象中获取对应的输入输出流读取和写入就可以实现发送消息;也就是只要咱们把每次连接的socket保存起来,发送和接收数据就直接获取对应的socket就可以实现。也就是需要循环调用 server.accept()阻塞方法,对每个连接的socket保存起来。并且对于每一个连接的客户端单独创建一个线程进行读写操作。提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。

GY的的专栏 2455

用ServerSocket类与Socket类实现客户端与服务端的交互

ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互,下面先来查看ServerSocket类的api 看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着

Zero_zzq的博客 6663

计算机网络实验(15):基于Socket的网络编程(附JAVA源码.txt)

在网络编程中,可能会发生各种类型的异常,比如网络连接问题、IO异常等,学会如何捕获和处理这些异常非常重要;如果在服务器端需要同时处理多个客户端,可能需要使用多线程来实现并发通信,从而保证各个客户端的服务质量。设计通信协议是必要的,可以使用一些简单的协议来定义消息格式和通信规则,以便客户端和服务器能够正确地解析和处理消息。在真实的应用中,安全性是至关重要的,比如考虑到加密通信、身份验证等安全问题。 总的来说,基于Socket的即时通信小程序是一个很好的项目,可以让我了解到Java网络编程的基本原理并且提升实

m0_72934718的博客 2611

Java使用Socket实现服务器与客户端通信

使用Socket 根据IP和端口连接到同一个服务器,如果这个服务器是不存在的,就创建一个新的服务器作为被连接对象。其他客户端可以通过主机共享发送的数据

qq_38174131的博客 7468

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 341

java实现socket客户端与服务端实现数据相互发送

socket客户端与服务端相互发送数据,可以持续发送!!!

weixin_43985633的博客 1483

Burp靶场实战:JWT签名绕过漏洞分析与利用

本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。

weixin_29325515的博客 594

振动信号相位测量的关键技术解析

本文深入解析了振动信号相位测量的关键技术,强调相位是振动信号的“身份证”,对于动平衡和故障诊断至关重要。文章详细阐述了键相传感器与振动传感器的选型、安装要点,以及时域和频域(FFT)核心算法,并针对现场噪声、转速波动等挑战提供了实战解决方案,帮助工程师实现精准、稳定的相位测量。

vv45678的博客 838

Android端与服务端基于TCP/IP协议的Socket通讯

什么是TCP/IP协议? 百度百科的解释:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议

Ryan's zone 5万+

基于Joplin和Joplin Server搭建私有云笔记

我们知道,多端同步功能是笔记工具最重要的功能。只有实现了多端同步,我们才能在工作电脑和手机之间无缝切换笔记体验。Joplin 在同步上做得不错,支持 Dropbox、OneDrive 和 AWS s3(当然国内都没法用),支持 WebDAV 协议,也支持自家的 Joplin Server。 本文介绍如何在自己的服务器上搭建 Joplin Server,并配置好 Joplin Desktop 的同步功能。 前置条件 安装docker 创建 Joplin Server 配置文件 创建配置文件,~/docke

代码时光 1万+

简单的TCP程序:服务器与客户端的简单通信

基础TCP程序:服务器与客户端的简单通信 编译环境:IDEA 2021 JDK: JDK11 编写TCP程序时,一般都会编写两个Demo,一个是服务器端,一个是客户端。二者想要通信需要用到Socket:套接字。套接字的作用类似于手机,两个人想要通电话必须都得有手机,服务器与客户端之间的通信都是基于Socket进行的。 首先搭建一个服务器。 搭建服务器使用的是ServerSocket类,需要传入参数,这个参数就是设置的端口号。端口号范围为0~65535,但一般使用的时候都会从1025开始使用,因为前面的端

火桑花终开的博客 5074

【Bug已解决】Claude Team Plan 购买席位报错 Payment failed 解决方案

方案适用场景推荐指数检查账单历史状态排查的第一步⭐⭐⭐⭐⭐更换支付方式类型快速尝试是否能绕开问题⭐⭐⭐联系官方支持团队最终解决问题的正规渠道⭐⭐⭐⭐⭐临时过渡方案紧急用人需求的应急处理⭐⭐⭐关注官方修复进度确认属于系统性缺陷的场景⭐⭐⭐⭐Claude Team Plan 增购席位报的问题,社区反馈和实际排查表明很大概率属于平台计费系统在处理按比例分摊费用这类复杂计算链路时的系统性缺陷,而不是用户自身的支付信息填写有误。先排除自身账单历史是否存在异常。

一键难忘的博客 4181

备战数学建模38-粒子群算法pso番外篇1(攻坚战2)

粒子群算法最初是根据鸟类群体行为得到的启发,对鸟群行为进行仿真的算法,是一种启发式算法,也就是智能优化算法,利用信息共享,通过中间信息进行改进搜索,从而获得问题的可行解。我们简单从下图去体会一下粒子群算法,就是有多个鸟,每个鸟相当于一个粒子,每只鸟的位置受自己认知的历史最佳位置和当前距离食物最近的鸟的位置的影响。我们进一步分析这个图,可以得到两个公式,第一个是速度公式,即每只鸟的当前速度受上一步的速度惯性,自我认知和社会认知三部分影响,第二个是位置公式,即每只鸟的位置受上一位置和上一位置的速度的影响。

nuist_NJUPT的博客 1664

java 聊天室 私聊_使用socket实现网络聊天室和私聊功能

使用socket技术实现网络聊天室和私聊功能,具体内容如下话不多说先上图:1、聊天室群聊页面在线用户的联系人列表socket连接页面私聊页面项目介绍与服务端实现socket连接:每个客户端连接到服务器的时候,服务器会将每个连接的socket保存在list集合中。群聊功能:当有一个用户发送群聊消息给服务器的时候,服务器会将所有信息转发给list列表中的所有已连接的客户端。私聊功能:用户发送私聊信息给...

weixin_42620913的博客 909

【天气雷达】双偏振产品-差分反射率ZDR详解

双偏振产品-差分反射率ZDR详解。

珞瑜的博客 5408

Java综合编程 编写带图形界面的聊天程序

JAVA 作业 编写带图形界面的聊天程序实现让客户可以持续地发送消息给服务器,服务器也可以即时看到客户端发送的消息,并回消息给客户端。

qq_62463438的博客 1071

定位分析RCU stall问题

在编译内核时打开或者在启动参数中增加这样统计信息是在采样周期中收集的。其中number行分别是发生stalled的cpu上的硬中断,软中断,和上下文的切换次数cputime行的前三列分别是硬中断,软中断和任务消耗的cpu时间,单位为ms.最后一个数字是统计的周期时间(ms).因为用户态的任务通常不会引起RCU CPU stalls,所以任务通常是内核任务,这也是为什么只统计system cpu的原因.

happyAnger6的专栏 1994

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA网络编程实战应用——双向聊天(线程)

控制台双向聊天Code Code 以下如果有些流不懂的话,看我之前关于IO流的文章 要先启动服务端(Server),再启动客户端(Client) 必须要保证端口一致 Socket socket = new Socket(“localhost”,9999); 主机我写的是localhost,也就是本机 import java.io.IOException; import java.io.InputS...

架构师干货 704

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

[转载] Android localsocket 的基础和使用实践: 01

转自 https://blog.youkuaiyun.com/yellow_hill/article/details/39498015 前言:介绍一种使用socket通信的方法可以使native和framework自由通信 在Android系统中,java代码和本地代码(c/c++)直接的通信一般是使用jni接口,但是这种方法一般适用于framework层调用native层的代码,但本地代码层(native...

刚刚好的博客 483

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java利用socket实现客户端和服务器相互通信

上一篇讲解了客户端给服务器发送消息,这一篇讲解客户端和服务器相互发送消息,客户端发送消息给服务器,服务器收到客户端的请求然后返回信息给客户端。 1.服务器代码: ** * @author: njb * @Date: 2020/11/28 18:49 * @desc: 服务器socket */ public class ServerSocket { //客户端发送信息 public static void main(String[] args) { Output

u012556114的博客 1万+

java socket 实现FTP客户端

FTP(File Transfer Protocol, 文件传输协议)是支持Internet文件传输的各种规则所组成的集合。 FTP工作原理:双方至少需要建立两个TCP连接,一个成为控制连接,用于传输FTP命令;另一个称为数据连接,用于传输文件数据。 通过Socket编写FTP客户端,首先要了解服务器的命令: 命令 描述 ABOR 中

wongym1992 7251

java网络编程之基于TCP的socket编程,实现客户端和服务器相互通信

关于socket通信,收获了很多。 转自:https://blog.youkuaiyun.com/LJH_laura_li/article/details/82430038 视频:https://www.bilibili.com/video/av33558958/?spm_id_from=333.788.videocard.5 网络通信 首先说网络通信,网络通信使用IP地址标识internet上的计算机,使用...

GXQ的博客 1821

java中socket服务器_Java中使用Socket实现服务器端和客户端通讯

创建服务器端serverSocketimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import jav...

weixin_32346177的博客 2176
上一篇: Android实现调用摄像头,选择本地照片的功能
下一篇: java利用Socket在控制台互发信息
Cholechow
博客等级 码龄9年 37粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值