简单的聊天小程序

基于c/s的聊天小程序,带简单界面

 

客户端:chatClient

 

成员变量:

 

/** 套接字 */
 private Socket socket;
 /** 输入文本区域 */
 private JTextField field;
 /** 对话显示文本区域 */
 private JTextArea area;
 /** 输入流 */
 private DataInputStream dis;
 /** 输出流 */
 private DataOutputStream dos;
 /** 是否连接 */
 private boolean isConnected;
 /** 监听线程 */
 private Thread myThread=new Thread(new MyThread());

 

 

成员函数:

/** 主函数 */
 public static void main(String args[]) { }

 /** 服务端登陆函数 */
 public void launch() { }

 /** 连接函数*/
 public void connect() {}

 /**中断连接函数*/

 public void disConnect() { }

 

内部类:

 

 /** 监听线程类 */
 private class MyThread implements Runnable { }

 /**文本区域监听器*/

 private class TextListener implements ActionListener {}

 

 

 

服务器端:chatServer

成员变量:

/** 服务器套接字 */
 private ServerSocket ss;
 /** 客户端列表 */
 private ArrayList<Client> clients;
 /** 是否开启 */
 private boolean isStart;

 

成员函数:

/** 主函数 */
 public static void main(String args[]) {}

 /** 开始函数 */
 public void start() {}

内部类:

 /**
  * 客户端线程
  */

 private class Client implements Runnable {}

 

 

 

 

代码如下:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己写的小小小程序,能实现简单的通信 // Client.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <WS2tcpip.h> #include "Thread.h" #pragma comment(lib,"ws2_32.lib") #define PORT 4567 #define BUFFERMAX 256 CRITICAL_SECTION cs; int main() { WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); if (WSAStartup(sockVersion, &wsaData) != 0) { std::cout << "Initlization failed" << std::endl; system("pause"); return 0; } SOCKET clientSocket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientSocket == INVALID_SOCKET) { std::cout << "Failed socket!"<< std::endl; system("pause"); return 0; } sockaddr_in serverSockAddr; serverSockAddr.sin_family = AF_INET; serverSockAddr.sin_port = htons(PORT); InetPton(AF_INET,_T("127.0.0.1"),&(serverSockAddr.sin_addr.S_un.S_addr)); if (connect(clientSocket, (sockaddr*)&serverSockAddr, sizeof(sockaddr))) { std::cout << "Connect failed!" << std::endl; } InitializeCriticalSection(&cs); connection(clientSocket, (sockaddr*)&serverSockAddr); char * sendData = "你好,TCP服务端,我是客户端!\n"; send(clientSocket, sendData, strlen(sendData), 0); //volatile int connect_flag = 0; sock_Attribute sock_R = { clientSocket,0,&serverSockAddr}; sock_Attribute sock_S = { clientSocket,0,&serverSockAddr}; HANDLE hdll = CreateThread(NULL, 0, recv_Thread, &sock_R, 0, 0); if (hdll == nullptr) { std::cout << "创建线程失败" << std::endl; } send_Thread(&sock_S); system("pause"); DeleteCriticalSection(&cs); closesocket(clientSocket); WSACleanup(); return 0; } DWORD WSAAPI recv_Thread(LPVOID P) //不加 WSAAPI 关键字会报错,可能跟调用方式有关 { char recvBuffer[BUFFERMAX] = "\0"; int nRecv; int size = sizeof(recvBuffer); sock_Attribute* pSock = (sock_Attribute*)P; for (;;) { nRecv = recv(pSock->s, recvBuffer, size, pSock->flags); if (nRecv == SOCKET_ERROR||nRecv ==0) { connection(pSock->s, (sockaddr*)(pSock->serverAddr)); //break; } if(nRecv>0) { if (recvBuffer != '\0') // '\0' 即 NULL { std::cout << "Client : " << recvBuffer << std::endl; //*recvBuffer = NULL; memset(recvBuffer, 0x00, size); /* 字符串用字符串函数操作, 数组用指针操作,*/ } } } return 0; } DWORD WSAAPI send_Thread(LPVOID P) { sock_Attribute* pSock = (sock_Attribute*)P; char sendBuffer[BUFFERMAX] = "\0"; int size = sizeof(sendBuffer); for (;;) { std::cin.getline(sendBuffer, size); switch (send(pSock->s, sendBuffer,size, pSock->flags)) { case SOCKET_ERROR: { connection(pSock->s, (sockaddr*)(pSock->serverAddr)); break; } default: break; } } return 0; }
Java 聊天小程序可以使用 Socket 编程来实现,具体步骤如下: 1. 服务端程序:创建一个 ServerSocket 对象,指定端口号,并通过 accept() 方法监听客户端的连接请求; 2. 客户端程序:创建一个 Socket 对象,指定服务器 IP 地址和端口号,并通过该对象与服务器建立连接; 3. 服务端程序:通过 accept() 方法返回一个 Socket 对象,利用该对象的 InputStream 和 OutputStream 与客户端进行数据交换; 4. 客户端程序:利用 Socket 对象的 InputStream 和 OutputStream 与服务端进行数据交换; 5. 服务端程序:当客户端请求断开连接时,关闭 Socket 对象和 ServerSocket 对象。 下面是一个简单的 Java 聊天小程序的代码示例: 服务端程序: ``` import java.io.*; import java.net.*; public class Server { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(8888); System.out.println("Server started."); Socket socket = server.accept(); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); PrintWriter writer = new PrintWriter(out); String line; while ((line = reader.readLine()) != null) { System.out.println("Client: " + line); writer.println("Server: " + line); writer.flush(); } reader.close(); writer.close(); socket.close(); server.close(); } } ``` 客户端程序: ``` import java.io.*; import java.net.*; public class Client { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 8888); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); PrintWriter writer = new PrintWriter(out); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = console.readLine()) != null) { writer.println(line); writer.flush(); System.out.println("Server: " + reader.readLine()); } console.close(); reader.close(); writer.close(); socket.close(); } } ``` 注意:以上代码只是一个简单的示例,实际使用时还需要考虑并发访问、异常处理等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值