一个简单的Socket通信Demo

都忘了哪里下的了,留个记录

服务器端Demo:

Server.java(服务器端运行主程序,直接运行):

package cn.wjs;

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	private static final int port = 9999;
	private static final int backlog = 100;
	private static final String bindAddr = "127.0.0.1";

	public static void main(String[] args) throws Exception {
		System.out.println("正在启动Socket服务器");

		ServerSocket server = new ServerSocket(9998, 100, InetAddress.getByName("127.0.0.1"));
		System.out.println("启动完成\n正在监听客户端连接");
		while (true) {
			Socket socket = server.accept();
			System.out.println("产生了一个新的会话,来自:" + socket.getInetAddress() + "\n==================================");
			new ServerMessageReceiver(socket).start();
			new ServerMessageSender(socket).start();
			System.out.println("服务器端已启动");
		}
	}
}

ServerMessageReceiver.java:

package cn.wjs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ServerMessageReceiver extends Thread
{
  private Socket socket;

  public ServerMessageReceiver(Socket socket)
  {
    this.socket = socket;
  }

  public void run() {
    try {
      BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream(), "UTF-8"));

      String content = null;
      while (true) {
        if (this.socket.isClosed()) {
          System.out.println("Socket已经关闭");
          reader.close();
          this.socket.close();
          break;
        }
        content = reader.readLine();
        if (content.equals("bye")) {
          System.out.println("对方请求关闭连接,无法继续进行聊天");
          reader.close();
          this.socket.close();
          break;
        }
        System.out.println("【对方】" + content + "\n");
      }
      reader.close();
      this.socket.close();
    }
    catch (UnsupportedEncodingException e)
    {
      e.printStackTrace();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

ServerMessageSender.java:

package cn.wjs;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ServerMessageSender extends Thread
{
  private Socket socket;

  public ServerMessageSender(Socket socket)
  {
    this.socket = socket;
  }

  public void run() {
    try {
      BufferedWriter outwriter = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream(), "UTF-8"));
      BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
      String msg = null;
      while (true) {
        msg = inputReader.readLine();
        if (msg.toLowerCase().equals("exit")) {
          System.exit(0);
        }
        if (this.socket.isClosed()) {
          System.out.println("Socket已经关闭");
          outwriter.close();
          inputReader.close();
          this.socket.close();
          break;
        }
        outwriter.write(msg);
        outwriter.newLine();
        outwriter.flush();
      }
    }
    catch (UnsupportedEncodingException e)
    {
      e.printStackTrace();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

ClientDemo:

Client.java(客户端主程序,直接运行):

package cn.wjs;

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client
{
  private static final int port = 9999;
  private static final String bindAddr = "127.0.0.1";

  public static void main(String[] args)
  {
    System.out.println("正在连接Socket服务器");
    try {
      Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9998);
      System.out.println("已连接\n================");
      new ClientMessageSender(socket).start();
      new ClientMessageReceiver(socket).start();
      System.out.println("已启动");
    }
    catch (UnknownHostException e) {
      e.printStackTrace();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

ClientMessageReceiver.java:

package cn.wjs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ClientMessageReceiver extends Thread
{
  private Socket socket;

  public ClientMessageReceiver(Socket socket)
  {
    this.socket = socket;
  }

  public void run()
  {
    try {
      BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream(), "UTF-8"));
      String content = null;
      while (true) {
        if (this.socket.isClosed()) {
          System.out.println("Socket已经关闭");
          reader.close();
          this.socket.close();
          break;
        }
        content = reader.readLine();
        if (content.equals("bye")) {
          System.out.println("对方请求关闭连接,无法继续进行聊天");
          reader.close();
          this.socket.close();
          break;
        }
        System.out.println("【对方】" + content + "\n");
      }
    }
    catch (UnsupportedEncodingException e)
    {
      e.printStackTrace();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

ClientMessageSender.java:

package cn.wjs;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ClientMessageSender extends Thread
{
  private Socket socket;

  public ClientMessageSender(Socket socket)
  {
    this.socket = socket;
  }

  public void run()
  {
    try {
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream(), "UTF-8"));
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
      String msg = null;
      while (true) {
        msg = reader.readLine();
        if (msg.toLowerCase().equals("exit")) {
          System.exit(0);
        }
        if (this.socket.isClosed()) {
          System.out.println("Socket已经关闭");
          writer.close();
          this.socket.close();
          break;
        }
        writer.write(msg);
        writer.newLine();
        writer.flush();
      }
    }
    catch (UnsupportedEncodingException e)
    {
      e.printStackTrace();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}

通过elicpse导出jar包直接运行,服务器端导出jar设置main.class为Server.java,客户端导出jar设置main.class为Client.java

时间: 2024-08-04 23:50:02

一个简单的Socket通信Demo的相关文章

一个简单的socket通信小demo

写了一个socket的程序,可以和本地的服务器进行通信,要先和服务器建立链接,然后发送登录信息,验证成功,就可以和服务器通信了 1 页面截图 2 点击链接服务器,可以链接服务器,服务器的ip地址为:127.0.0.1 端口为 12345: 3 点击链接服务器之后,打印信息如下 4 点击登录,会向服务器发送登录信息: iam:zhangsan, 然后会客户端会显示登录成功 5 比如输入chongqingyoudian  6 在服务器控制台就能看到客户端发送的信息 客户端代码如下 1 // 2 //

一个多线程的Socket通信Demo(C语言实现)

-----------这是客户端程序-------------- #include "stdio.h" #include "winsock2.h" #include "stdlib.h" #pragma comment(lib,"ws2_32") void main() {     WSADATA wsaData;     WSAStartup(MAKEWORD(2,2),&wsaData);     SOCKET s

一个最简单的Socket通信例子

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.  Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.不管是

C# 如何实现简单的Socket通信(附示例)

上周由于有个项目需要用到网络通信这块,然后就花了点时间研究了一下,本来想上周就写出来的,但是突然要忙,所以等到现在. 话说对于网络通信,以前写C++的时候,天天面对着线程和Socket,所以换成C#也就没那么怕了,虽然C++下也没有掌握的多好,但毕竟只是一个小Demo,只作为了解一下过程. 自己写了一个服务端和一个客户端,刚开始比较简单,只是能达到连通,收发信息的目的,但是很粗糙.而后稍加改进呢~加上了多线程,所以能感觉更科学一些,不过自己真的很菜,代码写的不是很好看,下面分两个版本给大家表出来

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

一个简单的Webservice的demo,简单模拟服务

前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一下Webservice,将二者进行比较学习.考虑到以后的发展,当时决定学习WCF,希望自己在不久的将来能将WCF学的稍微精通点吧.这几天又将Webservice看了一遍,回想当时学习Webservice处处碰到坑,由于没人指点,连最基本地点发布都折腾好长时间,只能一点一点的填坑跳坑.这几天闲了,想写一个简单的

利用KBEngine +U3D 做的一个简单MMO手游Demo

利用KBE +U3D 做的一个简单MMO手游Demo目前只完成到一个普通攻击和一个火球术,  火球术需要点击怪物后才能释放.点击npc后会跳到一个副本.里面有一只半兽人. 欢迎大家来试玩 并提出宝贵意见.http://pan.baidu.com/s/1dDtVjnb 感谢kbe 一直以来的帮助.

一个简单的webservice的demo(下)winform异步调用webservice

绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单的Webservice的demo(中)_前端页面调用 当winform同步调用服务时,由于调用服务不能像C/S那样快,winform的UI进程一直在等待服务的返回结果,就无法响应用户事件.为了解决这种问题,我们用异步调用. 首先,先准备一个模拟用的webservice,如下: 1 using Sys

简单的socket通信

//client#include <iostream> #include <WinSock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib using namespace std; int main() { SOCKET so; WSADATA ws; if (WSAStartup(MAKEWORD(2, 2), &ws) != 0) { cout << "WSAStartup