Server.java

 package socket;

 import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class Server {
//监听的端口
public static final int PORT = 54039; public static void main(String[] args)
{
new Server().start();
} //启动监听线程的方法
public void start()
{
ServerSocket serverSocket = null;
try {
//新建一个ServerSocket对象,监听PORT端口,可能会抛出IOException
serverSocket = new ServerSocket(PORT);
System.out.println("serverScoket:" + serverSocket);
//循环监听
while(true)
{
//获取客户端连接,如果没有则阻塞
Socket clientSocket = serverSocket.accept();
//启动线程处理监听到的数据并启动线程
new Thread(new DataRunnable(clientSocket)).start(); }
} catch (IOException e) {
e.printStackTrace();
} finally{
if (null != serverSocket)
{
try {
serverSocket.close();
System.out.println("close serverSocket success!");
} catch (IOException e) {
System.out.println("close serverSocket failed!");
}
}
} } /**
* 处理监听信息的job
*/
private class DataRunnable implements Runnable
{
Socket client; public DataRunnable(Socket client) {
super();
this.client = client;
} public void run() {
try {
//读取客户端socket取输入流,包装成DataInputStream
DataInputStream dataIn = new DataInputStream(client.getInputStream());
DataOutputStream dataOut = new DataOutputStream(client.getOutputStream());
String content = dataIn.readUTF();//有read其他格式的方法,具体见api
//打印到控制台
System.out.println("content read in from client:" + content); //向客户端回复信息
System.out.println("请输入要回复的内容:");
String reply = new BufferedReader(new InputStreamReader(System.in)).readLine();
dataOut.writeUTF(reply); if("Close".equals(content))
{
System.out.println("client has been closed ,i want to be closed too");
}
dataIn.close();
dataOut.close();
} catch (IOException e) {
e.printStackTrace();
} } }
}

Client.java

 package socket;

 import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException; public class Client {
public static final String ADDR = "localhost";//监听本机
public static final int PORT = 54039;//端口 public static void main(String[] args)
{
while(true)
{
Socket client = null;
DataInputStream dataIn = null;
DataOutputStream dataout = null;
try {
//创建客户端socket连接到主机服务器端
client = new Socket(ADDR, PORT); dataIn = new DataInputStream(client.getInputStream());
dataout = new DataOutputStream(client.getOutputStream()); //向服务器发送数据
System.out.println("请输入数据:");
String content = new BufferedReader(new InputStreamReader(System.in)).readLine();
dataout.writeUTF(content); //读取服务器端返回的数据
String reply = dataIn.readUTF();
System.out.println("server reply:" + reply); } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
if(null!=dataIn) dataIn.close();
if(null!=dataout) dataout.close();
if(null!=client) client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

Socket--Java的更多相关文章

  1. java.net.Socket/java.net.ServerSocket-TCP Socket编程

    TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...

  2. socket java 实例

    简单的java socket 示例 一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端 ...

  3. Socket: Java Socket 几个重要的TCP/IP选项解析(转)

    Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...

  4. Socket: java Socket的isConnected()、和isClosed()判断是否在线的问题(转)

    首先,很多初学者都会用这两个API来判断对方是否在线,但是经过我的实践,此API并不能实时判断是否在线的状态. 经过百度查询资料后,得出结论: 事实上这些方法都是访问socket在内存驻留的状态,当s ...

  5. java socket编程(li)

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

  6. socket编程-java

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

  7. java socket编程(网络编程)

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

  8. 【转】java的socket编程

    转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...

  9. Java从零开始学四十五(Socket编程基础)

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

  10. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

随机推荐

  1. 没听说过这些,就不要说你懂并发了,three。

    引言 很久没有跟大家再聊聊并发了,今天LZ闲来无事,跟大家再聊聊并发.由于时间过去的有点久,因此LZ就不按照常理出牌了,只是把自己的理解记录在此,如果各位猿友觉得有所收获,就点个推荐或者留言激励下LZ ...

  2. Oracle生成指定表的列名,并前后添加select from

    表的列名比较多的时候,手工一个个的写列名比较麻烦,这个函数可以让人偷偷懒 create or replace function f_GetCols(p_TableName in varchar2/*获 ...

  3. 第一天:安装nodejs

    1.首先,下载NodeJs程序.地址 http://www.nodejs.org/download/,选择Windows Installer 64bit 2.下载下来后,狂点下一步,安装在本地硬盘上. ...

  4. Delphi 控件大全

    delphi 控件大全(确实很全)   delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar ...

  5. Apache与Nginx对客户端请求的处理机制对比

    Apache与Nginx对客户端请求的处理机制对比 模块 大致为四个模块,核心模块.HTTP模块.邮件模块,以及第三方模块 核心模块主要包含两类功能的支持,一类是主体功能,包括进程管理,权限管理,错误 ...

  6. button按钮波纹,箭头特效css

    波纹特效: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  7. SignalR 2.1 简单入门项目

    概述 SignalR是通讯框架,前台Web页面与后台服务实现数据的交互.ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时We ...

  8. 坐标系统与投影变换及在ARCGIS中的应用

      首先提几个问题:是否有遇到坐标转换的问题?又是否有遇到投影转换的问题?坐标转换与投影转换有什么区别?下面看几个概念:1.地球椭球体( Ellipsoid,Spheroid)2.大地基准面( Geo ...

  9. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  10. 编译原理-词法分析03-DFA

    0.术语 DFA Deterministic finite automation,确定性有穷自动机.一般用于翻译正则表达式. 状态state DFA中的圆圈,表示模式在识别过程中的位置. 转换tran ...