java socket编程小例子
2013-11-05 22:11
323 查看
一该程序的基本思路
(1)建立客户端:
A.根据要连接的一方(server)方的IP地址以及端口号,发出客户请求(对应server:此时server.accept()方法可以在端口号处侦听,是否有客户端请求出现)生成socket。
B.利用客户端socket获取is os流,分别构造bufferedReader
,printwriter 对象。
C.每当从控制台录入文字时候,就将利用os将数据写到流中,同时刷新流,使得服务器端能够及时收到。紧接着从is中读取数据。
D.需要注意,无论什么异常出现,都要将流关闭。
(2)建立服务器端:
A.根据侦听的端口号建立server端,server.aceept()会阻塞,直到有客户端请求为止,并返回一个socket
B.其余类似建立客户端过程。
二源代码
Client
/**
* @FILE : TalkClient.java
* @PACKAGE : Client
* @COPYRIGHT : copyright(c) 2013,Rights Reserved
* @COMPANY :
* @DESCIPTION :
* @AUTHOR : formice
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:14:08
*/
package Client;
import java.net.Socket;
import java.io.*;
import java.net.*;
/**
***************************************************************
* @CLASS : TalkClient
* @DESCRIPTION : socket客户端编程
* @AUTHOR : leixingbang
* @AUTHOR-EMAIL : leixingbang@163.com
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:14:08
* <p>
* @MODIFY LOG :
* @AUTHOR : leixingbang
* @VERSION : v2.0
* @MODIFY DATE :
* </p>
****************************************************************
*/
public class TalkClient implements Runnable{
public void run()
{
Socket clientSocket=null;//必须先进行初始化
BufferedReader sin=null;
PrintWriter os=null;
BufferedReader is=null;
try{
System.out.print("客户端开始运行!\n");
clientSocket=new Socket("127.0.0.1",4700);
sin=new BufferedReader(new InputStreamReader(System.in));
//获取客户端输入
//Reader reader=new InputStreamReader(System.in);
os=new PrintWriter(clientSocket.getOutputStream());
//输出到网络流
is =new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
//从网络流读取
String readline=sin.readLine();//获取输入字符串
String serverline;
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("客户端发送:"+readline);
serverline=is.readLine();
System.out.println("客户端收到:"+serverline);
readline=sin.readLine();
}
}catch(Exception e)
{
e.printStackTrace();
}finally//关闭流
{
try {
is.close();
os.close();
sin.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
}
}
Server:
/**
* @FILE : TalkServer.java
* @PACKAGE : Server
* @COPYRIGHT : copyright(c) 2013,Rights Reserved
* @COMPANY :
* @DESCIPTION :
* @AUTHOR : formice
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:51:02
*/
package Server;
import java.net.*;
import java.io.*;
import Client.TalkClient;
/**
***************************************************************
* @CLASS : TalkServer
* @DESCRIPTION :
* @AUTHOR : leixingbang
* @AUTHOR-EMAIL : leixingbang@163.com
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:51:02
* <p>
* @MODIFY LOG :
* @AUTHOR : leixingbang
* @VERSION : v2.0
* @MODIFY DATE :
* </p>
****************************************************************
*/
public class TalkServer implements Runnable {
int i=0;
public void run()
{
ServerSocket server=null;
Socket socket=null;
BufferedReader is=null;
PrintWriter os=null;
try{
server=new ServerSocket(4700);//监听端口
socket=server.accept();//请求到来才会产生
//使用accept()阻塞等待客户请求,有客户请求到来才产生一个Socket对象,并继续执行
}catch(Exception e)
{
System.out.println("建立server异常");
//e.printStackTrace();
}
try
{
System.out.print("服务器端开始运行!\n");
String line;
String temp;
is=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//获取输入流并构造输入流对象(装饰者模式,父类调用子类方法)
line=is.readLine();//会构成阻塞,知道获取一行文字才会继续执行下面的程序
os=new PrintWriter(socket.getOutputStream());
//由socket获取输出流,并构造输出流对象
while(!line.equals("bye"))
{
i++;
System.out.println("服务器端收到来自客户端第"+i+"条信息:"+line);
temp="服务器回复:"+"我已收到来自客户端第"+i+"条信息";
os.println(temp);
os.flush();
//刷新输出流,使Client马上收到该字符串
line=is.readLine();
}
}catch(Exception e)
{
System.out.println("服务器端异常!");
e.printStackTrace();
}finally
{
try{
socket.close();
server.close();
is.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String args[]) {
TalkClient talkClient=new TalkClient();
Thread clientThread=new Thread(talkClient);
clientThread.start();
TalkServer talkServer=new TalkServer();
Thread serverThread=new Thread(talkServer);
serverThread.start();
}
}
(1)建立客户端:
A.根据要连接的一方(server)方的IP地址以及端口号,发出客户请求(对应server:此时server.accept()方法可以在端口号处侦听,是否有客户端请求出现)生成socket。
B.利用客户端socket获取is os流,分别构造bufferedReader
,printwriter 对象。
C.每当从控制台录入文字时候,就将利用os将数据写到流中,同时刷新流,使得服务器端能够及时收到。紧接着从is中读取数据。
D.需要注意,无论什么异常出现,都要将流关闭。
(2)建立服务器端:
A.根据侦听的端口号建立server端,server.aceept()会阻塞,直到有客户端请求为止,并返回一个socket
B.其余类似建立客户端过程。
二源代码
Client
/**
* @FILE : TalkClient.java
* @PACKAGE : Client
* @COPYRIGHT : copyright(c) 2013,Rights Reserved
* @COMPANY :
* @DESCIPTION :
* @AUTHOR : formice
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:14:08
*/
package Client;
import java.net.Socket;
import java.io.*;
import java.net.*;
/**
***************************************************************
* @CLASS : TalkClient
* @DESCRIPTION : socket客户端编程
* @AUTHOR : leixingbang
* @AUTHOR-EMAIL : leixingbang@163.com
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:14:08
* <p>
* @MODIFY LOG :
* @AUTHOR : leixingbang
* @VERSION : v2.0
* @MODIFY DATE :
* </p>
****************************************************************
*/
public class TalkClient implements Runnable{
public void run()
{
Socket clientSocket=null;//必须先进行初始化
BufferedReader sin=null;
PrintWriter os=null;
BufferedReader is=null;
try{
System.out.print("客户端开始运行!\n");
clientSocket=new Socket("127.0.0.1",4700);
sin=new BufferedReader(new InputStreamReader(System.in));
//获取客户端输入
//Reader reader=new InputStreamReader(System.in);
os=new PrintWriter(clientSocket.getOutputStream());
//输出到网络流
is =new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
//从网络流读取
String readline=sin.readLine();//获取输入字符串
String serverline;
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("客户端发送:"+readline);
serverline=is.readLine();
System.out.println("客户端收到:"+serverline);
readline=sin.readLine();
}
}catch(Exception e)
{
e.printStackTrace();
}finally//关闭流
{
try {
is.close();
os.close();
sin.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
}
}
Server:
/**
* @FILE : TalkServer.java
* @PACKAGE : Server
* @COPYRIGHT : copyright(c) 2013,Rights Reserved
* @COMPANY :
* @DESCIPTION :
* @AUTHOR : formice
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:51:02
*/
package Server;
import java.net.*;
import java.io.*;
import Client.TalkClient;
/**
***************************************************************
* @CLASS : TalkServer
* @DESCRIPTION :
* @AUTHOR : leixingbang
* @AUTHOR-EMAIL : leixingbang@163.com
* @VERSION : v1.0
* @DATE : 2013-10-29
下午02:51:02
* <p>
* @MODIFY LOG :
* @AUTHOR : leixingbang
* @VERSION : v2.0
* @MODIFY DATE :
* </p>
****************************************************************
*/
public class TalkServer implements Runnable {
int i=0;
public void run()
{
ServerSocket server=null;
Socket socket=null;
BufferedReader is=null;
PrintWriter os=null;
try{
server=new ServerSocket(4700);//监听端口
socket=server.accept();//请求到来才会产生
//使用accept()阻塞等待客户请求,有客户请求到来才产生一个Socket对象,并继续执行
}catch(Exception e)
{
System.out.println("建立server异常");
//e.printStackTrace();
}
try
{
System.out.print("服务器端开始运行!\n");
String line;
String temp;
is=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//获取输入流并构造输入流对象(装饰者模式,父类调用子类方法)
line=is.readLine();//会构成阻塞,知道获取一行文字才会继续执行下面的程序
os=new PrintWriter(socket.getOutputStream());
//由socket获取输出流,并构造输出流对象
while(!line.equals("bye"))
{
i++;
System.out.println("服务器端收到来自客户端第"+i+"条信息:"+line);
temp="服务器回复:"+"我已收到来自客户端第"+i+"条信息";
os.println(temp);
os.flush();
//刷新输出流,使Client马上收到该字符串
line=is.readLine();
}
}catch(Exception e)
{
System.out.println("服务器端异常!");
e.printStackTrace();
}finally
{
try{
socket.close();
server.close();
is.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String args[]) {
TalkClient talkClient=new TalkClient();
Thread clientThread=new Thread(talkClient);
clientThread.start();
TalkServer talkServer=new TalkServer();
Thread serverThread=new Thread(talkServer);
serverThread.start();
}
}
相关文章推荐
- java中的堆与栈
- (整理)eclipse问题汇总
- 框架搭建1-----spring3+hibernate4+mysql
- Java基础重温(十)-scjp 2
- Java的JDBC事务详解
- Rhythmk 一步一步学 JAVA (12) Spring-1 之入门
- Java 正则表达式(二)
- Java上传、下载代码
- NetBeans更改默认JDK路径
- SpringMVC和Struts的区别
- SpringMVC和Struts是线程安全的吗?为什么?
- Struts2注解Convention扫描jar中的Action的设置,注解Action咋jar中找不到.
- Java基础1--概述--环境变量--HelloWorld
- java socket编程
- Java中File类使用
- JAVA NIO 简介
- Java 中的语法糖 (Syntactic Sugar)
- 不用Spring也能实现Ioc
- JAVA多线程
- Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/slf4j/impl/Static