网络编程 tcp(一)
server端:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> #define MAX_BUFF_SIZE 1024 int 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, );
if (listenfd == -) {
perror("socket()");
return -;
} memset(&server_addr, , sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons();
ret = bind(listenfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (ret == -) {
perror("bind()");
return -;
} ret = listen(listenfd, );
if (ret == -) {
perror("listen()");
close(listenfd);
return -;
} while () {
connfd = accept(listenfd,(struct sockaddr *)&client_addr, &client_len);
if (connfd == -) {
perror("accept()");
continue;
} memset(buff, , sizeof(buff));
recv(connfd, buff, sizeof(buff), );
printf("%s\n", buff); memset(buff, , sizeof(buff));
strcpy(buff, "hello, client---<from server>");
send(connfd, buff, strlen(buff)+, ); close(connfd);
} close(listenfd); return ;
}
client端:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> #define MAX_BUFF_SIZE 1024 int main(int argc, char *argv[])
{
int ret;
int sockfd;
struct sockaddr_in server_addr;
char buff[MAX_BUFF_SIZE]; memset(&server_addr, , 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(); while () {
sockfd = socket(AF_INET, SOCK_STREAM, );
if (sockfd == -) {
perror("socket()");
return -;
}
ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (ret == -) {
perror("connect()");
return -;
} memset(buff, , sizeof(buff));
strcpy(buff, "hello, server---<from client>");
ret = send(sockfd, buff, strlen(buff), );
if (ret == -) {
perror("sendto()");
break;
} memset(buff, , sizeof(buff));
ret = recv(sockfd, buff, sizeof(buff), );
if (ret == -) {
perror("recv()");
break;
} printf("%s\n", buff); close(sockfd); sleep();
} return ;
}
遇到的问题:
1.设置server地址时,server、client端都没有设置 sin_family,此时 client 调用 send 之后进程就直接exit掉了,没有返回。
2.client端必须要关闭掉fd之后重新socket一个,否则会报
Transport endpoint is already connected
错误。
网络编程 tcp(一)的更多相关文章
- GO语言练习:网络编程 TCP 示例
1.代码 2.编译及运行 1.网络编程 TCP 示例 simplehttp.go 代码 package main import ( "net" "os" &qu ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- C#网络编程TCP通信实例程序简单设计
C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- Socket网络编程-TCP编程
Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...
- 32.网络编程TCP/UDP服务
网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...
- 网络编程TCP/IP详解
网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...
- java 网络编程-tcp/udp
--转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...
- 网络编程TCP/IP实现客户端与客户端聊天
一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...
随机推荐
- jdbc连接模拟用户登陆密码判断
package com.aaa.demo1; import com.aaa.utils.JdbcUtils; import java.sql.Connection; import java.sql.P ...
- clearfix原理
[clearfix原理] .clearfix:after { <----在类名为“clearfix”的元素内最后面加入内容: content: "."; <----内容 ...
- js中函数的 this、arguments 、caller,call(),apply(),bind()
在函数内部有两个特殊的对象,arguments 和 this,还有一个函数对象的属性caller. arguments对象 arguments是一个类似数组的对象,包含着传入函数的所有参数. func ...
- Failed to start LSB: Bring up/down networking 问题
Failed to start LSB: Bring up/down networking 问题 1.执行 service network restart 出现以下错误 Restarting ne ...
- hibench 对CDH5.13.1进行基准测试(测试项目hadoop\spark\)HDFS作HA高可靠性
使用CDH 5.13.1部署了HADOOP集群之后,需要进行基准性能测试. 一.hibench 安装 1.安装位置要求. 因为是全量安装,其中有SPARK的测试(SPARK2.0). 安装位置在SPA ...
- 第十章 优先级队列 (b4)完全二叉堆:批量建堆
- Trigger,Cursor
USE [Demo]GO /****** Object: StoredProcedure [dbo].[p_couser_Student] Script Date: 02/24/2014 20:43: ...
- Vue Baidu Map 插件的使用
最近在做一个项目,技术采用的是Vue.js套餐,有个百度地图的需求,当时,大脑宕机,立马去引入百度地图API,当时想到两种方法,一种是在index.html中全局引入js,此法吾不喜,就采用了第二种异 ...
- vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
原文:http://www.jb51.net/article/129270.htm main.js入口文件配合vue-router写这个 router.afterEach((to,from,next) ...
- swift 8.0之后打开 手机设置
if #available(iOS 8.0, *){ if let url = URL(string: UIApplication.openSettingsURLString), UIApplicat ...