关闭

用ServerSocket类与Socket类实现客户端与服务端的交互

标签: sockettelnet通信
961人阅读 评论(0) 收藏 举报
分类:

ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互,下面先来查看ServerSocket类的api

看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着的ip地址,输出连接的地址,代码如下

	public static void test1() {
		try {
			ServerSocket ss = new ServerSocket(8888);
			Socket sk = ss.accept();
			//获取连接的ip地址	
			System.out.println(sk.getInetAddress());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
可以通过电脑自带的命令提示符使用telnet命令连接测试,命令telnet加上ip加上端口号就可以连接了


上面通过使用ServerSocket返回一个Socket,然后我们通过查看Socket的api看到可以获取一个输入流,然后用Scanner包装,获取我们输入的内容,然后用while循环,然后在控制台输出内容

public static void test2() {
		try {
			System.out.println("服务已启动");
			ServerSocket ss = new ServerSocket(8888);
			Socket s = ss.accept();
			System.out.println(s.getInetAddress());
			InputStream is = s.getInputStream();
			Scanner sc = new Scanner(is);
			while (sc.hasNextLine()) {
				String str = sc.nextLine();
				System.out.println(str);
			}
			s.close();
			is.close();
			sc.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
然后还是跟上个方法一样,连接上服务端,输入telnet ip地址 端口然后回车
会出现如下黑色界面,按“ctrl+]”


会出现如下界面,继续按回车

然后出现如下界面,我们输入的内容才能在命令提示符里显示出来


上面的代码方法使我们能在服务端发消息给客户端,而客户端不能发消息给服务端,下面介绍客户端能发消息给服务端,服务端不能发消息给客户端,我们new一个ServerSocket,然后监听8888端口,然后用Socket获取一个输出流(把我们在控制台写的内容输出到服务端),然后new一个scanner来包装System.in(获取键盘的输入流),然后把键盘的输入流输出到客户端

	public static void test3() {
		try {
			System.out.println("服务启动");
			ServerSocket ss = new ServerSocket(8888);
			Socket socket = ss.accept();
			PrintWriter pw = new PrintWriter(socket.getOutputStream());
			Scanner sc = new Scanner(System.in);
			while(sc.hasNextLine()){
				String str = sc.nextLine();
				pw.println(str);
				pw.flush();
			}
			socket.close();
			sc.close();
			pw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

可以看到只能控制台发送消息,而服务端发送消息无效,接下来介绍在服务端能发送接收消息,客户端也能接收发送消息,新建两个类


在ServerSocket(服务端)里输入以下代码,既获取输入流又获取输出流,然后读取键盘输入的内容

	public static void test1() {
		try {
			ServerSocket ss = new ServerSocket(8888);
			while(true){
				Socket socket = ss.accept();
				Scanner scanner = new Scanner(socket.getInputStream());
				PrintWriter pw = new PrintWriter(socket.getOutputStream());
				while(scanner.hasNextLine()){
					String str = scanner.nextLine();
					System.out.println(str);
					Scanner s = new Scanner(System.in);
					if (s.hasNextLine()) {
						String  msg = s.nextLine();
						pw.println(msg);
						pw.flush();
					}
				}
					socket.close();
					scanner.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
然后在Socket(客户端)里输入以下代码,既获取输入流又获取输出流,然后获取键盘输入的内容

	public static void test1(){
		try {
			Socket socket = new Socket("自己的ip地址xxx.xxx.xxx.xxx", 8888);
			Scanner scanner = new Scanner(socket.getInputStream());
			PrintWriter pw = new PrintWriter(socket.getOutputStream());
			Scanner s = new Scanner(System.in);
			while(s.hasNextLine()){
				String str = s.nextLine();
				if (str.equals("exit")) {
					System.out.println("我要退出了");
					socket.close();
					s.close();
					System.exit(0);
				}
				pw.println(str);
				pw.flush();
				String msg = scanner.nextLine();
				System.out.println(msg);
			}
			s.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

在以上两个类里写好后先启动ServerSocket,然后再启动Socket,就可以实现服务端与客户端的一来一去对讲功能

0
0
查看评论

Java Socket实现客户端服务端相互发送文本

Socket是网络编程的接口,它抽象成线程之间的接口。两个线程,不管它的操作系统,不管它的硬件,只要有Socket接口,在同一主机中或者在不同的主机中都能通信。我们见到的大大小小的网络程序大多都是通过Socket实现的,比如游戏服务器,ftp服务器,浏览器等。所以理解Socket编程,是网络编程的的...
  • e_one
  • e_one
  • 2016-06-09 14:39
  • 8095

一个 Java 的 Socket 服务器和客户端通信的例子

一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:         先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户...
  • defonds
  • defonds
  • 2012-09-12 15:21
  • 138629

java网络socket编程(三)之ServerSocket服务器端

一、简介 java提供了一个ServerSocket类表示服务器Socket。服务器Socket在服务器上运行,监听入站ftp连接。每个服务器Socket监听服务器上的一个特定端口。当远程注解上的一个客户端尝试这个端口时,服务器就会被唤醒,协商建立客户端与服务器端的连接,并返回一个常规的Socket...
  • zzjstudent
  • zzjstudent
  • 2016-07-13 18:43
  • 5458

使用socket连接实现客户端向服务器端的单向通信(socket通信第二弹)

在之前章节实现了客户端到服务器端的socket连接,本次课程介绍使用socket通信实现客户端到服务器端的单向通信。
  • changhe6669
  • changhe6669
  • 2017-05-13 14:04
  • 576

Socket编程服务端和客户端代码

<br /> //服务器端Socket程序 建一个main程序接受客户端的消息 public void ServerSocket() { Socket listener = new Socket(Ad...
  • superhoy
  • superhoy
  • 2011-03-23 00:59
  • 17575

C++ socket编程 实现服务端与客户端的通讯

服务器端程序: // Server.cpp : Defines the entry point for the console application. // #include "winsock2.h" #pragma comment(lib, "ws2...
  • orange_xxx
  • orange_xxx
  • 2012-02-20 18:51
  • 29926

Socket编程服务端和客户端互相通信,实现简单的聊天

socket实现聊天功能
  • hello_word2
  • hello_word2
  • 2017-03-27 20:21
  • 1967

ServerSocket 用法详解

本篇文章观点和例子来自 《Java网络编程精解》, 作者为孙卫琴, 出版社为电子工业出版社。 在客户/服务器通信模式中, 服务器端需要创建监听端口的 ServerSocket, ServerSocket 负责接收客户连接请求. 本章首先介绍 ServerSocket 类的各个构造方法, 以及成员的...
  • mengtuoling111
  • mengtuoling111
  • 2016-09-05 14:13
  • 2901

简单的Socket及ServerSocket例子

刚学习socket,参考了一些资料,实现一个简单的java tcp socket Socket 类   socket可以使一个应用从网络中读取和写入数据,不同计算机上的两个应用可以通过连接发送和接受字节流,当发送消息时,你需要知道对方的ip和端口,在java中,socket指的是java.n...
  • zhoufenqin
  • zhoufenqin
  • 2015-12-18 09:06
  • 13823

一个简单telnet服务端程序实现

曾经写的一个简单telnet服务端程序。telnet协议参考博文 http://blog.csdn.net/gujintong1110/article/details/43964221#include <stdio.h> #include <unistd.h> #inc...
  • gujintong1110
  • gujintong1110
  • 2015-03-15 17:12
  • 3453
    个人资料
    • 访问:5043次
    • 积分:193
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档