C/S(客户端/服务器) TCP通信聊天程序

1、服务器端

import java.io.*;
import java.net.*;

public class Server {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			ServerSocket server=new ServerSocket(9898);
			Socket socket=server.accept();
			BufferedReader br1=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));
			PrintWriter write=new PrintWriter(socket.getOutputStream());
			System.out.println("Server has started···");
			System.out.println();
			System.out.println("有消息(From Client):	"+br1.readLine());
			System.out.println();
			System.out.print("Server:");
			String line=br2.readLine();
			while(!line.equals("bye")){
				write.println(line);
				write.flush();
				System.out.println();
				System.out.println("有消息(From Client):	"+br1.readLine());
				System.out.println();
				System.out.print("Server:");
				line=br2.readLine();
			}
			br1.close();
			write.close();
			server.close();
			socket.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

}


2、客户端


import java.io.*;
import java.net.*;

public class Client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			Socket socket=new Socket("Lenovo",9898);
			BufferedReader br1=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			BufferedReader br2=new BufferedReader(new InputStreamReader(System.in));
			PrintWriter write=new PrintWriter(socket.getOutputStream());
			System.out.println("Client has started···");
			System.out.println();
			System.out.print("Client:");
			String line=br2.readLine();
			while(!line.equals("bye")){
				write.println(line);
				write.flush();
				System.out.println();
				System.out.println("有消息(From Server):	"+br1.readLine());
				System.out.println();
				System.out.print("Client:");
				line=br2.readLine();
			}
			write.close();
			br1.close();
			socket.close();
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

}


先启动服务器端监听,然后启动客户端连接,客户端先发送消息,服务器后,聊天以"bye"结束。





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 libevent 实现 TCP/IP 客户端通信,可以按照以下步骤进行: 1. 创建一个 event_base 对象,用于事件驱动循环。 2. 创建一个 TCP/IP 客户端套接字,并连接到服务器。 3. 创建一个 bufferevent 对象,用于处理套接字的读写事件。 4. 设置 bufferevent 的回调函数,处理读写事件和错误事件。 5. 将 bufferevent 添加到 event_base 中,开始事件循环。 以下是一个简单的示例代码: ```c #include <event2/event.h> #include <event2/buffer.h> #include <event2/bufferevent.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> void read_cb(struct bufferevent *bev, void *ctx) { struct evbuffer *input = bufferevent_get_input(bev); char buf[1024]; size_t len = evbuffer_remove(input, buf, sizeof(buf)); // 处理接收到的数据 } void write_cb(struct bufferevent *bev, void *ctx) { // 数据已发送完成 } void error_cb(struct bufferevent *bev, short events, void *ctx) { if (events & BEV_EVENT_EOF) { // 连接已关闭 } else if (events & BEV_EVENT_ERROR) { // 发生错误 } else if (events & BEV_EVENT_TIMEOUT) { // 超时 } bufferevent_free(bev); } int main() { struct event_base *base = event_base_new(); int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in servaddr; servaddr.sin_family = AF_INET; servaddr.sin_port = htons(12345); inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); struct bufferevent *bev = bufferevent_socket_new(base, sockfd, BEV_OPT_CLOSE_ON_FREE); bufferevent_setcb(bev, read_cb, write_cb, error_cb, NULL); bufferevent_enable(bev, EV_READ|EV_WRITE); event_base_dispatch(base); event_base_free(base); return 0; } ``` 在这个示例中,我们创建了一个 event_base 对象,一个 TCP/IP 客户端套接字,并连接到服务器。然后创建了一个 bufferevent 对象,并设置了读写回调函数和错误回调函数。最后将 bufferevent 添加到 event_base 中,开始事件循环。在事件循环中,libevent 会自动处理套接字的读写事件和错误事件,调用相应的回调函数进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值