用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

柯侧耳倾听者    -  云代码空间

—— 翱翔在Java世界的海洋之上

TCP流式套接字编程

2017-12-14|856阅||

摘要:一、实验目的 1、理解客户机与服务器的通信原理,熟悉套接字编程的基本思想。 2、掌握基于TCP流式套接字的网络程序设计方法。   二、预习内容及要求(要求写出预


一、实验目的

1、理解客户机与服务器的通信原理,熟悉套接字编程的基本思想。

2、掌握基于TCP流式套接字的网络程序设计方法。

 

二、预习内容及要求(要求写出预习内容)

1、掌握不同类型的输入输出流类,标准数据流、文件流、数据输入输出流、对象流等。

2、编程时,应考虑异常处理。

 

三、实验内容、操作过程及实验结果记录

实验题1  阅读并运行下列服务器和客户机程序实例,分析其运行结果。

(1)服务器线程处理类源代码:ServerThread.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

 

/*

 * 服务器线程处理类

 */

public class ServerThread extends Thread {

// 和本线程相关的Socket

Socket socket = null;

 

public ServerThread(Socket socket) {

this.socket = socket;

}

//线程执行的操作,响应客户端的请求

public void run(){

InputStream is=null;

InputStreamReader isr=null;

BufferedReader br=null;

OutputStream os=null;

PrintWriter pw=null;

try {

//获取输入流,并读取客户端信息

is = socket.getInputStream();

isr = new InputStreamReader(is);

br = new BufferedReader(isr);

String info=null;

while((info=br.readLine())!=null){//循环读取客户端的信息

System.out.println("我是服务器,客户端说:"+info);

}

socket.shutdownInput();//关闭输入流

//获取输出流,响应客户端的请求

os = socket.getOutputStream();

pw = new PrintWriter(os);

pw.write("欢迎您!");

pw.flush();//调用flush()方法将缓冲输出

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

//关闭资源

try {

if(pw!=null)

pw.close();

if(os!=null)

os.close();

if(br!=null)

br.close();

if(isr!=null)

isr.close();

if(is!=null)

is.close();

if(socket!=null)

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

(2)服务器程序实例源代码:Server.java

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

 

/*

 * 基于TCP协议的Socket通信,实现用户登陆

 * 服务器端

 */

public class Server {

public static void main(String[] args) {

try {

//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口

ServerSocket serverSocket=new ServerSocket(8888);

Socket socket=null;

//记录客户端的数量

int count=0;

System.out.println("***服务器即将启动,等待客户端的连接***");

//循环监听等待客户端的连接

while(true){

//调用accept()方法开始监听,等待客户端的连接

socket=serverSocket.accept();

//创建一个新的线程

ServerThread serverThread=new ServerThread(socket);

//启动线程

serverThread.start();

count++;//统计客户端的数量

System.out.println("客户端的数量:"+count);

InetAddress address=socket.getInetAddress();

System.out.println("当前客户端的IP:"+address.getHostAddress());

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

(3)客户机程序实例源代码:Client.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

 

/*

 * 客户端

 */

public class Client {

public static void main(String[] args) {

try {

//1.创建客户端Socket,指定服务器地址和端口

Socket socket=new Socket("localhost", 8888);

//2.获取输出流,向服务器端发送信息

OutputStream os=socket.getOutputStream();//字节输出流

PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流

pw.write("用户名:alice;密码:789");

pw.flush();

socket.shutdownOutput();//关闭输出流

//3.获取输入流,并读取服务器端的响应信息

InputStream is=socket.getInputStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

String info=null;

while((info=br.readLine())!=null){

System.out.println("我是客户端,服务器说:"+info);

}

//4.关闭资源

br.close();

is.close();

pw.close();

os.close();

socket.close();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 

 

 

 

 

实验题2 采用TCP流式套接字编程实现客户端和服务器端信息的简单交互。

 

四、实验过程中所遇问题思考与讨论(可写个人体会,或相关理论知识,根据个人具体情况选做)

    

顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: 柯侧耳倾听者
    • 等级: 初级设计师
    • 积分: 2220
    • 代码: 64 个
    • 文章: 64 篇
    • 随想: 5 条
    • 访问: 43 次
    • 关注

    标签

    最新提问

      站长推荐