谈一谈socket与java
用java中socket实现socket聊天
1, 什么是socket
Socket 是指网络套接字,什么是套接字呢? 这是网络上一种端对端的网络协议,端口就是进程号,socket在网络中让这两个端通信形成端口直接通信,所以socket的参数可想而知就是两端ip和端口号了;
再说在网络中,总要有人付出,要在网络中等着别人链接,不然的话你一点想连别人,别人在两点想连你,怎么也不可能连上,总有哟个人需要做等待的角色,这个角色就是服务端也就是serverSocket,他在网络中提供一个固定的ip和端口号套接字;
2, 在Java中实现socket接口
在Java中提供了两个用来建立socket链接都在java.net包中,在客户端要用Socket(addr,port)//参数是远程服务的地址和端口号;另一个在服务端中用ServerSocket(port) 建立一个等待的socket端,同时使用serversocket.accept() 在服务端动态等待并接受一个前来请求链接的socket请求
一旦serversocket.accept()方法获得一个链接,就会封装出一个Socket对象服务端可用这个对象,获得客户端的信息并向客户端发送信息;话不多说,上代码;
package testpackage;
/*
* @author:mayeye
* @about:服务端
* */
import java.net.*;
import java.io.*; public class TestServer {
public static void main(String[] args) {
//try {
System.out.println("=============================");
ServerSocket server=null;
try {
server=new ServerSocket(1233);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Socket client = null;
try {
client = server.accept();
System.out.println("ip为:"+client.getInetAddress()+"的客户端链接了");
System.out.println("port为:"+client.getPort()+"的客户端链接了");
System.out.println("Localport为:"+client.getLocalPort()+"的客户端链接了"); } catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String line = null;
BufferedReader is = null;
try {
is = new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
PrintWriter os = null;
try {
os = new PrintWriter(client.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Client:"+is.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
line=sin.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
try {
System.out.println("Client:"+is.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
line=sin.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
os.close();
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("********************************");
/*}catch(Exception e) {
System.out.println("-------------------------------");
}*/
}
}
上面是服务端代码
package testpackage;
import java.net.*;
import java.io.*;
public class testsocket {
public static void main(String[] args) {
try {
Socket client=new Socket("127.0.0.1",1233);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//构建一个标准输入流
PrintWriter os=new PrintWriter(client.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));//由client对象构造一个输入流
String readline;
System.out.println("ip为:"+client.getInetAddress()+"的客户端链接了");
readline=sin.readLine();
while(!readline.equals("bye")) {
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("---*****************---");
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //从系统标准输入读入一字符串s
}
os.close();
is.close();
client.close(); } catch (UnknownHostException e) {
// TODO Auto-generated catch block
System.out.print("====================找不到主机名");
} catch (IOException e) {
System.out.print("===================IO错误");
} }
}
上面是服务端代码;
大家都是成年人,所以目录结构就不用我说了吧
这只是用java实现了一个最简易的socket聊天,必须一问一答,而且没有界面;
预告一下,下一篇博客我将接介绍界面的解决方案;
谈一谈socket与java的更多相关文章
- 谈一谈Java8的函数式编程(二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
- socket编程-java
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 【Socket】Java Socket基础编程
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 谈一谈泛型(Generic)
谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...
- 谈一谈Elasticsearch的集群部署
Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...
- 【Socket】Java Socket编程基础及深入讲解
Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...
- 谈一谈iOS事件的产生和传递
谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...
- 谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
介绍: InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等.现在Inn ...
随机推荐
- sciense
I hate the word "networking." It must be one of the most overused words in the English lan ...
- springboot使用redisTemplate遇到的问题
概述 最近工作中新构建了一个项目,用的springboot,由于项目中要使用各种各样的缓存,就使用了spring-data-redis,这个东西比我想象中要难使用的多啊,而且我还遇到个问题,就是在用R ...
- java入门day03
控制流程 一: if else / switch 1. 随机数的产生:导入import java.lang.Math; num=Math.random() -->[0,1); [ ...
- springboot-mybatis多数据源以及踩坑之旅
首先,springboot项目结构如下 springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到): 1 package com.letzgo.con ...
- font-family 中文字体列表
华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 儷黑 Pro:LiHei Pro ...
- 原型设计软件介绍——Axure RPx
我个人使用的是Axure RP8版本 进去后的主页面(汉化版),可以看到上方功能栏,缩放大小功能,左下角则是软件内置的一些元件 我在左边的元件库中拖入了一个矩形框,定义为640*960个像素,并把矩形 ...
- pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化
前言:pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1. 下面是一个简单是实例,检查一定的输入和期望输出测试功能的典型例子 2. 标记单 ...
- ORACLE存储过程定时器例子(存储过程变量赋值)
CREATE OR REPLACE PROCEDURE SP_DSSJTS_XMRSLOG as str1 ); str2 ); str3 ); begin select 'xmrslog_'||ex ...
- python调用c++ DLL
python DLL = ctypes.cdll.LoadLibrary("./dll_file.so") #引入dllDLL.func(mat.ctypes.data // (1 ...
- CentOS6.5 安装vncserver实现图形化访问
一. 安装gnome图形化桌面 #yum groupinstall -y "X Window System" #yum groupinstall -y "Desktop& ...