用c++语言tcp通讯程序示例
时间: 2024-01-26 21:03:24 浏览: 29
以下是一个基本的TCP通信程序示例,包括服务器端和客户端。
服务器端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
// 初始化服务器地址结构体
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = 12345; // 设置端口号
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
// 绑定套接字到服务器地址
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR on binding");
exit(1);
}
// 监听连接
listen(sockfd, 5);
clilen = sizeof(cli_addr);
// 等待客户端连接
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0) {
perror("ERROR on accept");
exit(1);
}
// 与客户端通信
bzero(buffer, 256);
n = read(newsockfd, buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n", buffer);
n = write(newsockfd, "I got your message", 18);
if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}
// 关闭套接字
close(newsockfd);
close(sockfd);
return 0;
}
```
客户端代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 2) {
fprintf(stderr,"usage %s hostname\n", argv[0]);
exit(1);
}
// 获取服务器地址
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(1);
}
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}
// 初始化服务器地址结构体
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = 12345; // 设置端口号
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
// 连接服务器
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
perror("ERROR connecting");
exit(1);
}
// 与服务器通信
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd, buffer, strlen(buffer));
if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}
bzero(buffer,256);
n = read(sockfd, buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("%s\n",buffer);
// 关闭套接字
close(sockfd);
return 0;
}
```
这个示例程序可以通过以下步骤来运行:
1. 在终端中编译服务器端代码:`gcc server.c -o server`
2. 在终端中编译客户端代码:`gcc client.c -o client`
3. 在终端中启动服务器端程序:`./server`
4. 在另一个终端中启动客户端程序:`./client localhost`(如果服务器在另一台计算机上运行,则使用该计算机的IP地址代替“localhost”)。
5. 输入要发送的消息,按Enter键。
6. 程序将在服务器端和客户端之间建立连接并传输消息。
7. 关闭套接字并退出程序。