博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程 tcp(一)
阅读量:5233 次
发布时间:2019-06-14

本文共 2540 字,大约阅读时间需要 8 分钟。

server端:

#include 
#include
#include
#include
#include
#include
#include
#define MAX_BUFF_SIZE 1024int main(int argc, char *argv[]){ int ret; int listenfd, connfd; struct sockaddr_in server_addr; int client_len; struct sockaddr_in client_addr; char buff[MAX_BUFF_SIZE]; listenfd = socket(AF_INET, SOCK_STREAM, 0); if (listenfd == -1) { perror("socket()"); return -1; } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(49001); ret = bind(listenfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (ret == -1) { perror("bind()"); return -1; } ret = listen(listenfd, 5); if (ret == -1) { perror("listen()"); close(listenfd); return -1; } while (1) { connfd = accept(listenfd,(struct sockaddr *)&client_addr, &client_len); if (connfd == -1) { perror("accept()"); continue; } memset(buff, 0, sizeof(buff)); recv(connfd, buff, sizeof(buff), 0); printf("%s\n", buff); memset(buff, 0, sizeof(buff)); strcpy(buff, "hello, client---
"); send(connfd, buff, strlen(buff)+1, 0); close(connfd); } close(listenfd); return 0;}

 

client端:

#include 
#include
#include
#include
#include
#include
#include
#define MAX_BUFF_SIZE 1024int main(int argc, char *argv[]){ int ret; int sockfd; struct sockaddr_in server_addr; char buff[MAX_BUFF_SIZE]; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(49001); while (1) { sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket()"); return -1; } ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (ret == -1) { perror("connect()"); return -1; } memset(buff, 0, sizeof(buff)); strcpy(buff, "hello, server---
"); ret = send(sockfd, buff, strlen(buff), 0); if (ret == -1) { perror("sendto()"); break; } memset(buff, 0, sizeof(buff)); ret = recv(sockfd, buff, sizeof(buff), 0); if (ret == -1) { perror("recv()"); break; } printf("%s\n", buff); close(sockfd); sleep(3); } return 0;}

 

 遇到的问题:

1.设置server地址时,server、client端都没有设置 sin_family,此时 client 调用 send 之后进程就直接exit掉了,没有返回。

2.client端必须要关闭掉fd之后重新socket一个,否则会报

  Transport endpoint is already connected

  错误。

 

转载于:https://www.cnblogs.com/rivsidn/p/10614687.html

你可能感兴趣的文章
自己到底要的是什么
查看>>
Kruskal基础最小生成树
查看>>
ubuntu 14.04 安装搜狗拼音输入法
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
md5sum命令详解
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用...
查看>>