使用socket与线程实现简单机器人聊天

来源:互联网 发布:nginx 域名不能访问 编辑:程序博客网 时间:2024/06/01 10:28

Socket的英文原义称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket

以下是代码示例(部分代码有注释):

SocketDemo.java:

import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class SocketDemo {/** * 使用socket与线程实现简单机器人聊天 */public static void test1(){try {//创建一个服务端,端口号是8888,等待客户端的连接ServerSocket serversocket=new ServerSocket(8888);while(true){//客户端连接成功Socket socket=serversocket.accept();System.out.println(socket.getInetAddress());//调用SocketThread类,并把接收的Socket对象传进去SocketThread st=new SocketThread(socket);//可以让多个用户同时连接服务端并执行同一个线程st.start();}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {test1();}}
SocketThread.java:

import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;public class SocketThread extends Thread {Socket socket = null;// 重写构造方法,可以传入socket对象public SocketThread(Socket socket) {this.socket = socket;}/** * 功能:实现服务端与客户端的对话 */public void run() {try {//获取客户端的输入流InputStream in = socket.getInputStream();//把输入流用Scanner对象接收,编码格式为UTF-8Scanner sc = new Scanner(in, "UTF-8");//获取客户端的输出流OutputStream os = socket.getOutputStream();//把输出流用PrintWriter对象接收PrintWriter pw = new PrintWriter(os);pw.println("Welcome to my home!");//刷新输出流pw.flush();if (sc != null) {while (sc.hasNextLine()) {//获取客户端的输入的信息String msg = sc.nextLine();//以下均是判断的内容,由于编码问题,这里均是英文测试if (msg.contains("hello")) {pw.println("hello,how are you!");pw.flush();} else if (msg.contains("I love you")) {pw.println("Me too!I miss you!");pw.flush();} else if (msg.contains("what's your name")) {pw.println("My name is robot!");pw.flush();} else if (msg.equalsIgnoreCase("exit")) {pw.println("bye");pw.flush();break;} else {pw.println("sorry,I don't understand!");pw.flush();}}}in.close();pw.close();os.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}


就是这么简单,今天是情人节,程序猿偷个懒。


0 0
原创粉丝点击