前面使用了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. JQ模拟触发事件

    jQuery 事件 - trigger() 方法 jQuery 事件参考手册 实例 触发 input 元素的 select 事件: $("button").click(functi ...

  2. 图解SQL Server 2008入门必会

    图解SQL Server 2008入门必会   https://jingyan.baidu.com/article/656db918eded1ee381249c0b.html 图解SQL Server ...

  3. 一个数字从后向前输入每一位数字,Camel和Pascal命名规范,IsValid()

    int num = int.Parse(Console.ReadLine()); ; ) { n = num % ; num /= ; Console.WriteLine(n); } Camel和Pa ...

  4. docker记录

    # docker run 运行程序 # docker stop (docker kill) 终止容器. (首先应该执行 docker stop!!) #停止所有容器 docker stop $(doc ...

  5. CNN 卷积神经网络结构

    cnn每一层会输出多个feature map, 每个Feature Map通过一种卷积滤波器提取输入的一种特征,每个feature map由多个神经元组成,假如某个feature map的shape是 ...

  6. HihoCoder - 1172 SG函数应用

    原文讲解很nice,我尝试换种观点 设背面朝上为F,否则T, 那么局面FFFFFF肯定为0 局面FTFFFF可以转为上面局面0,设为1 局面FFTFFF可以转到0,1,设为2 子游戏SG(x)=x 对 ...

  7. JS window,onload 与 $().read()

    JS:window.onload的使用介绍 .在body标签里面 .在JS语句调用 .同时调用多个函数 .JS调用多个函数 .自定义的函数多次调用 jquery $(document).ready() ...

  8. [转] Android:用GSON 五招之内搞定任何JSON数组

    [From] http://www.open-open.com/lib/view/open1472632967912.html 写在前面 关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 ...

  9. V1-Team Scrum Meeting 博客汇总

    V1-Team Scrum Meeting 博客汇总 计划文档 功能规格说明书 技术规格说明书 项目分解 贡献分配规则 一.Alpha阶段 第一次 Scrum Meeting 第二次 Scrum Me ...

  10. 让android系统中任意一个view变成进度条

    1.效果 2.进度条背景drawable文件 结束后可以恢复原背景. <?xml version="1.0" encoding="utf-8"?> ...