博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 简单socket实现TCP通信
阅读量:5280 次
发布时间:2019-06-14

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

服务器端代码

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main( int argc, char *argv[] ){ int sockfd, new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size, portnumber; const char hello[] = "Hello!\n"; if ( argc != 2 ) { printf("Usage: %s portnumber\a\n", argv[0]); exit(1); } if ( (portnumber = atoi(argv[1])) < 0 ) { printf("Usage: %s portnumber\a\n", argv[0]); exit(1); } /* 服务器端创建socket */ if ( ( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) == 1 ) { printf("Socket Error !\n"); exit(1); } /* 服务器端填充sockaddr结构 */ bzero( &server_addr, sizeof(struct sockaddr_in) ); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(portnumber); /* 将本地地址与socket绑定 */ if ( bind( sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr) ) == -1 ) { printf("Bind Error!\n"); exit(1); } /* 进入监听模式 */ if ( listen( sockfd, 5 ) == 1 ) { puts("Listen Error!"); exit(1); } while (1) { /* 服务器阻塞,直到与客户端建立连接 */ sin_size = sizeof(struct sockaddr_in); if ( (new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), (socklen_t *)&sin_size ) ) == -1 ) { puts("Accept Error!"); exit(1); } /* 连接成功 */ printf("Server get connection from %s\n", inet_ntoa(client_addr.sin_addr) ); inet_ntoa(client_addr.sin_addr); if ( write( new_fd, hello, strlen(hello) ) == -1 ) { puts("Write Error!"); exit(0); } /* 本次通信结束,循环下一个 */ close(new_fd); } /* 关闭当前连接 */ close(sockfd); return 0;}

客户端代码

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main( int argc, char *argv[] ){ int sockfd; char buffer[1124]; struct sockaddr_in server_addr; struct hostent *host; int portnumber, nbytes; if ( argc != 3 ) { printf("Usage: %s hostname portnumber\n", argv[0] ); exit(1); } if ( (host = gethostbyname(argv[1])) == NULL ) { puts("Host Error!"); exit(1); } if ( (portnumber = atoi(argv[2])) < 0 ) { printf("Usage: %s portnumber\a\n", argv[0]); exit(1); } if ( ( sockfd = socket(AF_INET, SOCK_STREAM, 0) ) == 1 ) { printf("Socket Error !\n"); exit(1); } bzero( &server_addr, sizeof(struct sockaddr_in) ); server_addr.sin_family = AF_INET;    server_addr.sin_port = htons( portnumber ); server_addr.sin_addr = *((struct in_addr *)host->h_addr);    /* 与服务器建立连接 */ if ( connect( sockfd, (struct sockaddr *)(&server_addr), sizeof(server_addr) ) == -1 ) { puts("Connect Error!"); exit(1); } if ( (nbytes = read(sockfd, buffer, 1024)) == -1 ) { puts("Read Error!"); exit(1); } buffer[nbytes] = '\0'; printf("I have received: %s\n", buffer ); close(sockfd); return 0;}

运行结果

转载于:https://www.cnblogs.com/GBRgbr/p/3418444.html

你可能感兴趣的文章
IntelliJ Idea 2017 免费激活方法
查看>>
IOS8 App开发快速入门视频教程与案例分享 20课 附讲义
查看>>
40、mysql的历史简介
查看>>
【java】为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
查看>>
boost相关函数
查看>>
iOS 设置导航栏之二(设置导航栏的颜色、文字的颜色、左边按钮的文字及颜色)...
查看>>
Java Bean 使用包装类型 还是基本类型
查看>>
常见同花顺面试题实例总结
查看>>
JQuery Offset实验与应用(转载)
查看>>
C# 移动开发 MasterDetailPage 侧滑
查看>>
理解RESTful架构[转]
查看>>
递归:斐波那契数列与汉诺塔
查看>>
前端-细节处理笔记
查看>>
第十六章 多态性(一)
查看>>
INSERT IGNORE INTO / REPLACE INTO
查看>>
Python数据类型-布尔/数字/字符串/列表/元组/字典/集合
查看>>
MFC中theApp
查看>>
类的无参方法
查看>>
Python 开发:初识Python(记笔记)
查看>>
sqlrelay 的安装配置和应用
查看>>