用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的更多相关文章

  1. 谈一谈Java8的函数式编程(二) --Java8中的流

    流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...

  2. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路

    从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...

  3. 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统

    ***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...

  4. socket编程-java

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  5. 【Socket】Java Socket基础编程

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  6. 谈一谈泛型(Generic)

    谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 ​ 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...

  7. 谈一谈Elasticsearch的集群部署

      Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...

  8. 【Socket】Java Socket编程基础及深入讲解

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  9. 谈一谈iOS事件的产生和传递

    谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...

  10. 谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别

    介绍: InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等.现在Inn ...

随机推荐

  1. Linux常用shell命令

    1.>>>>>刚安装好的ubuntu需要为root创建密码[解决]passwd root 2.>>>>>安装完ubuntu后需要更新[解决] ...

  2. Altium designer 新建快捷键

    示例: 1.按下Ctrl: 2.点击需要建立快捷键的图标:点击交互式布线图标,然后在选择性输入要用到的快捷键:

  3. R语言最优化(一维)

    最优化问题是普遍存在的,以前上运筹学课的时候也接触过最优化相关的问题,当时主要是理论课,并且关注的重点是单纯形法.运输问题以及图论等,这里指的最优化是指函数的最优化,即函数的极值,由于寻找一个局部最优 ...

  4. MySql5.5安装详细说明

      双击MySql5.5安装文件开始: next 打勾,Next 选Custom,原因如下面所述: Typical(典型安装) Installs the most common program fea ...

  5. volatile与synchronized有什么区别?

    下列说法正确的是()? A.我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程 B.一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用.而线程是在 ...

  6. sqoop碰到的问题

    sqoop碰到的问题 背景:从Oracle接入数据,一张表一千多万,数据量13G左右. 报错,表名找不到,将表名改成大写的 Exception in thread "main" j ...

  7. 极速在mac中安装python开发环境

    mac开发环境的安装: brew: 包管理工具{ 安装:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/in ...

  8. Hyperledger Fabric 建立一个简单网络

    Building you first network 网络结构: 2个Orgnizations(每个Org包含2个peer节点)+1个solo ordering service 打开fabric-sa ...

  9. MSBuild 命令参数

    Build a Visual Studio project or solution using MSBuild Command Line Arguments  常用命令行参数 详解: MSBuild ...

  10. 微信小程序scroll-view滚动一次多次触发的问题解决方案

    最近使用微信小程序开发的时候,需要用scroll-view的bindscrolltolower事件,控制加载下一页的内容.但是发现在ios里,下拉滚动一次,事件触发两次,导致重复加载数据. 经过百度和 ...