Socket--Java
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的更多相关文章
- java.net.Socket/java.net.ServerSocket-TCP Socket编程
TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...
- socket java 实例
简单的java socket 示例 一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端 ...
- Socket: Java Socket 几个重要的TCP/IP选项解析(转)
Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...
- Socket: java Socket的isConnected()、和isClosed()判断是否在线的问题(转)
首先,很多初学者都会用这两个API来判断对方是否在线,但是经过我的实践,此API并不能实时判断是否在线的状态. 经过百度查询资料后,得出结论: 事实上这些方法都是访问socket在内存驻留的状态,当s ...
- java socket编程(li)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...
- socket编程-java
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- java socket编程(网络编程)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 【转】java的socket编程
转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...
- Java从零开始学四十五(Socket编程基础)
一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
随机推荐
- php 批量去空格和注释
原理:php自带函数去注释和空格 => php_strip_whitespace如题,新建文件 re_note.php,将文件放入你要批量去除注释和空格的根目录.然后运行就行了 代码如下: & ...
- jstl foreach标签
forEach标签 forEach标签用来循环. 属性: * var :定义循环变量 * begin :从哪开始 * end :到哪结束 * step :递增 * items :遍历的内容 * var ...
- iOS TabeView 头视图和尾视图不滑动的实现
因项目有需求不能让section中的头尾视图滑动,顾根据网上的一些资料和自己整理的思路,已实现了不滑动效果,上代码,啥都说了,搞了2个小时都是泪.... 1.创建一个tableview _mainTa ...
- android 第三方登录---新浪微博
1.AndroidManiFest.xml设置,这里我只是简单的用授权,获取基本信息,所以只用了这一个 <!--微博--> <!-- 必须注册在微博授权,分享微博时候用到 --> ...
- 【leetcode】Spiral Matrix
题目概要: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spi ...
- htaccess分布式配置文件常用写法
htaccess 写法 Apache中的.htaccess(或者”分布式配置”了针对目录改变配置的方法,即,在特定的文档目录中放置包含或多个指令的,以作用于此目录及其子目录.作为,所能的命令受到限制. ...
- UDP协议开发
UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务.与TCP协议不同,UDP协议直接利用I ...
- wpf telerik中的book控件
下载 telerik中的书本控件,仅供学习使用.
- CodeForces 540
A. Combination Lock time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- android Context 持有导致的内存泄漏
Context使用场景 为了防止Activity,Service等这样的Context泄漏于一些生命周期更长的对象,可以使用生命周期更长的ApplicationContext,但是不是所有的Conte ...