前面使用了UDP进行通信的聊天程序

现在做一个用TCP进行通信的聊天程序

原理:

ServerSocket Socket

1.开一个线程监听端口,准备接收消息

2.不断接受消息发送到目的端口

P.S.因为TCP是面向连接的所以中间要注意先后顺序,代码写得有点乱

 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; /**
* 聊天程序
* TCP实现
* 开一个线程监听一个端口,接收消息
* @author GXF
*
*/
public class TcpChatWindow {
private int destPort; //目的端口
private int listenPort; //监听端口
private Socket socketToSendMessage; //发送消息的socket public TcpChatWindow(int destPort, int listenPort){
this.destPort = destPort;
this.listenPort = listenPort; //init
init();
} /**
* 接收消息线程
* @author GXF
*
*/
class ReceiveMessageThread implements Runnable{
//接收消息socket
private ServerSocket receiveMessageSocket; @Override
public void run() {
//init
init();
while(true){
try {
Socket clientSocket = receiveMessageSocket.accept();
InputStream inputStreamOfClientSocket = clientSocket.getInputStream();
byte buff[] = new byte[1024];
int lengthOfMessage = -1;
StringBuilder sb = new StringBuilder();
//read message
while((lengthOfMessage = inputStreamOfClientSocket.read(buff)) > 0){
sb.append(new String(buff, 0, lengthOfMessage));
}//while
//输出消息到控制台
System.out.println(sb.toString());
//关闭socket
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 对线程进行初始化
*/
public void init(){
try {
receiveMessageSocket = new ServerSocket(listenPort);
} catch (IOException e) {
e.printStackTrace();
}
} } //初始化操作
private void init(){ //start ReceiveMessageThread
Thread receiveMessageThread = new Thread(new ReceiveMessageThread());
receiveMessageThread.start();
//input message and send message
while(true){
Scanner scanner = new Scanner(System.in);
String messageToSend = scanner.nextLine();
// getSocketToSendMessage();
sendMessage(messageToSend);
scanner.close();
} } /**
* 向对方发送消息
* @param message
*/
public void sendMessage(String message){
try {
Socket socketToSendMessage = new Socket(InetAddress.getByName("127.0.0.1"), destPort);
OutputStream outputStreamOfClientSocket = socketToSendMessage.getOutputStream();
byte bytesOfMessage[] = message.getBytes();
outputStreamOfClientSocket.write(bytesOfMessage);
socketToSendMessage.close();
} catch (IOException e) {
e.printStackTrace();
}
} //获取发送消息的socket
public Socket getSocketToSendMessage(){
if(socketToSendMessage == null){
try {
socketToSendMessage = new Socket(InetAddress.getByName("127.0.0.1"), destPort);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return socketToSendMessage;
} public static void main(String args[]){
if(args.length != 2){
System.out.println("usage: java TcpChatWindow destport listenport");
return;
}
int destPort = Integer.valueOf(args[0]);
int listenPort = Integer.valueOf(args[1]); TcpChatWindow chatWindow = new TcpChatWindow(destPort, listenPort);
}
}

Java使用TCP聊天程序的更多相关文章

  1. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  2. Java使用UDP聊天程序

    主要想测试Java UDP通信.Java UDP使用DatagramSocket和DatagramPacket完成UDP通信 主要思路: 1.本机通信,ip地址为:127.0.0.1 2.开一个线程监 ...

  3. Java 之 TCP 通信程序

    一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...

  4. Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序

    演示TCP的传输的客户端和服务端的互访 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息. 客户端: 1.建立Socket服务,指定要连接方朵和端口 2.获取Socket流中的输出流,将数 ...

  5. 网络编程应用:基于TCP协议【实现一个聊天程序】

    要求: 基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据 客户端代码: package Homework1; import java.io.IOException; impor ...

  6. java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端

    java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端 启动界面如下图: 首先启动服务器: 客户端登陆,登陆成功后为: 默认发送是全部用户,是多人发送. 当在边列 ...

  7. Java网络编程以及简单的聊天程序

    网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...

  8. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  9. 仿QQ聊天程序(java)

    仿QQ聊天程序 转载:牟尼的专栏 http://blog.csdn.net/u012027907 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本 ...

随机推荐

  1. CPU 的工作原理

    内部架构 CPU 的根本任务就是执行指令,对计算机来说最终都是一串由 0 和 1 组成的序列.CPU 从逻辑上可以划分成 3 个模块,分别是控制单元.运算单元和存储单元 .其内部架构如下: [1]控制 ...

  2. HDU6330-2018ACM暑假多校联合训练Problem L. Visual Cube

    就是画个图啦 分三个平面去画orz #include <iostream> #include <cmath> #include <cstring> #include ...

  3. Invalid bound statement (not found): com.taotao.mapper.TbItemMapper.selectByExample: 错误

    在Maven工程下,想通过controller接收url中的参数Id查询数据库的数据,并且以json形式显示在页面. 在浏览器输入url后出现的问题: 八月 22, 2016 1:45:22 下午 o ...

  4. 从图片中提取html格式的布局

    制作界面的自动化 意义:对于程序设计人员来说,比较痛苦的是制作界面.从设计人员发送的稿件(通常为jpg格式),到完成html的布局,需要将图像转化为div标记,自动化这一过程十分有意义 1.设计一个工 ...

  5. Fast Matrix Operations UVA - 11992 线段树

    题意翻译 有一个r行c列的全0矩阵,有以下三种操作. 1 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素加v 2 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素 ...

  6. x-boot

    https://github.com/Exrick/x-boot-front https://gitee.com/Exrick/x-boot

  7. Qt 学习之路 2(31):贪吃蛇游戏(1)

    Qt 学习之路 2(31):贪吃蛇游戏(1) 豆子 2012年12月18日 Qt 学习之路 2 41条评论 经过前面一段时间的学习,我们已经了解到有关 Qt 相当多的知识.现在,我们将把前面所讲过的知 ...

  8. Android 生成xml文件及xml的解析

    1.生成xml文件的两种方式 (1)采用拼接的方式生成xml(不推荐使用) (2)利用XmlSerializer类生成xml文件 package com.example.lucky.test52xml ...

  9. IIS 配置 url 重写...

    <?xml version="1.0"?> <configuration> <system.webServer> <rewrite> ...

  10. JSTL的核心标签

    JSTL的核心标签: .if: 语法:<c:if test="" var="" scope=""></c:if> 当 ...