简单的stream socket例子

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

服务器端:

#include<stdio.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdlib.h>
int main(){
	int sock_server, sock_client;
	struct sockaddr_in server_addr, client_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(6666);
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //inet_addr("127.0.0.1")
	sock_server = socket(AF_INET, SOCK_STREAM, 0);
	if(sock_server < 0){
		printf("server socket create error!\n");
		exit(1);		
	}
	int server_len = sizeof(server_addr);
	if(bind(sock_server, (struct sockaddr*)&server_addr, server_len) < 0){
		printf("bind server socket error\n");
		exit(0);
	}
	if(listen(sock_server, 5) < 0){
		printf("serever socket listen error\n");
		exit(1);
	}
	while(1){
//		printf("wait\n");
		int client_len = sizeof(client_addr);
		sock_client = accept(sock_server, (struct sockaddr*)&client_addr, (socklen_t*)&client_len);
		if(sock_client < 0){
			printf("Accept error\n");
			exit(1);
		}
//		printf("Accepted\n");
		int pid = fork();
		if(pid == 0){
			char buf[100];
			recv(sock_client, buf, 100, 0);
			printf("Message from client: %s\n", buf);
			send(sock_client, "Hello client", 100, 0);
			struct sockaddr_in server;
			server_len = sizeof(server);
			getsockname(sock_client, (struct sockaddr*)&server, (socklen_t*)&server_len);
			char local_addr[20];
			if(inet_ntop(AF_INET, (void*)&server.sin_addr, local_addr, sizeof(local_addr))){
//				printf("转换成功\n");
				printf("information: %s %d\n", local_addr, ntohs(server.sin_port));
			}
			else
				printf("地址转换失败\n");
//			printf("AAA\n");
			while(1)  //不调用close(),导致tcp状态一直处于close_wait状态
				;
			close(sock_client);
		}
	}
	close(sock_server);
	return 0;
}



客户端:

#include<stdio.h>
#include<netinet/in.h>
#include<unistd.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
int main(){
	int sock_server, sock_client;
	struct sockaddr_in server_addr, client_addr;
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(6666);
	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
	sock_client = socket(AF_INET, SOCK_STREAM, 0);
	if(sock_client < 0){
		printf("client socket create error!\n");
		exit(1);		
	}
	if(connect(sock_client, (struct sockaddr*)&server_addr, sizeof(server_addr)) != -1){
			printf("client success");
			char buf[100] = "Hello server";
			send(sock_client, buf, 100, 0);
			recv(sock_client, buf, 100, 0);
			printf("Message from server: %s\n", buf);
			int client_len = sizeof(client_addr);
			while(1)
				;
			close(sock_client);
	}else{
		printf("Connect error\n");
		exit(1);
	}
	return 0;
}


C语言实现Socket简单通信 环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等。 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客户机负责发送消息并打印收到的Hello World. 服务器步骤:建立socket,绑定socket和地址信息,开启监听,收到请求后发送数据。 客户端步骤:建立socket,连接服务器端,接收并 阅读详情

相关推荐

基于TCP的socket通信过程及例子

Socket也叫套接字,用来实现网络通讯,通过调用系统提供的API,可以和远程的机子传输数据。Socket有很多种协议,而这篇文章主要讨论TCP部分的内容,文章主要从socket的阻塞模式和非阻塞模式的比较,TCP和UDP的比较来阐述,还以例子说明服务端与客户端的通讯过程

没有开花的树 4644

socket编程(一)使用SOCK_STREAM建立可靠通信

socket是我们用来进行网络编程的基本API,一般系统都提供了socket,unix以及类unix(Linux、mac)它们都提供了socket,不过不同平台还是有那点区别的,其中Windows区别最大了。本文的代码是在mac上测试通过的。 socket是一个应用层编程API,提供了tcp/ip四层模型的第三层网络层的TCP、UDP协议的数据传输方式。第二层网际层有IP协议,它本来是不可靠的协

追求游戏之道 2万+

windows下socket通信的一个简单例子

目录 参考:https://www.cnblogs.com/fengff/p/10984251.html https://www.bilibili.com/video/BV1s4411T71G?from=search&seid=4213265499048566986 socket通信原理 服务器端 客户端 socket通信原理 服务器端 服务器端代码: // chatserver.cpp /*** 聊天系统 服务器端代码 */ #include <iostream.

weixin_45789973的博客 555

socket:套接字的类型SOCK_STREAM和SOCK_DGRAM

SOCK_STREAM(流式套接字) 面向连接的套接字 SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。 数据在传输过程中不会消失; 数据是按照顺序传输的; 数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。 SOCK_DGRAM(数据报格式套接字) 无连接的套接字 数据报套接字是一种不可靠的...

qq_33373173的博客 4039

socket详解

它通过一系列的操作实现这一功能,包括创建套接字、绑定地址和端口、监听连接请求、接受连接、发送和接收数据等。创建套接字是使用套接字编程的第一步。创建套接字的过程包括选择协议(如TCP或UDP)和指定套接字类型(流套接字或数据报套接字)。套接字提供了一种标准化的方法,使不同的计算机之间可以建立连接并在连接上进行数据传输。在套接字编程中,服务器套接字等待客户端的连接请求,而客户端套接字尝试连接到服务器。总之,套接字是一种用于实现网络通信的编程接口,它允许计算机上的进程通过网络连接进行数据传输和通信。

clayhell的博客 1699

socket编程-TCP各函数及其用法

socket编程-TCP各函数及其用法

weixin_45256307的博客 2166

socket编程-UDP各函数及其用法

socket编程-UDP各函数及其用法

weixin_45256307的博客 2566

Python实现Socket通信的简单例子

1、简述socket原理 socket又称套间字或者插口,是网络通信中必不可少的工具。有道是:“无socket,不网络”。由于socket最早在BSD Unix上使用,而Unix/Linux所奉为经典的至高哲学是“一切皆是文件”。因此socket在使用时也是完全符合这个哲学的,它涉及到listen()、bind()、accept()、write()/read()、close()等基本的类...

su_bao的博客 7万+

win32 socket的两个简单例子

参考:http://blog.csdn.net/qq506124204/article/details/7516456 参考:http://www.cppblog.com/bujiwu/archive/2009/01/11/Socket.html Windows下Socket编程主要包括以下几部分: 服务端    1、初始化Windows Socket库。    2、创建Socket

bytxl的专栏 2329

Python + Socket 简单例子

导言:Python Socket套接字中的异步、多线程等特性对服务器性能有很大影响,总结一些关键的框架以便开发过程中很快找到提高并发性性能的模型Server代码:# -*- coding:utf-8 -*- import socket import traceback import time def main(): host = "" port = 12345 address

Teman的博客 3768

一个简单socket客户端和服务端的例子

网络编程中最基础的就是socket的操作,这里记录一下socket的基础操作有哪些,分别是什么作用,最后以一个简单的客户端和服务端例子收尾。 socket是什么? socket起源于Unix,秉承着一切皆文件的思想,socket也是   打开 -读写- 关闭 这样的模式的一个实现。socket用于不同主机间进程的通信,而每个进程由 所使用的协议,Ip,端口号,三者决定,有兴趣的可以百度

无名小鱼 1万+

php socket说明 stream流说明

php socket说明 stream流说明

qq_32421489的博客 628

非常简单socket例子

socket server类,接收请求package com.wonder.socketexample;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;im

wonder的地下室 1652

Python Socket (套接字)详细解释以及简单的小例子

什么是 Socket? Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) family: 套接字家族可以使AF_UNIX或者A...

成熟的小孩的博客 1万+

socket.AF_INET, socket.SOCK_STREAM

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建IPv4套接字。s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP套接字。:二者共同定义了一个基于IPv4和TCP的套接字,适用于需要可靠通信的网络应用。是**地址族(Address Family)**的常量,表示使用。是**套接字类型(Socket Type)**的常量,表示使用。

小宝哥Code的专栏 1439

socket 中 SOCK_STREAM 和 SOCK_DGRAM的区别?

sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。 sock_dgram 是无保障的面向消息的socket , 主要用于在网络上发广播信息。 SOCK_STREAM是基于TCP的,数据传输比较有保障。SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播SOCK_STREAM 是数据流,一般是tcp/ip协议的编程,SOCK_DGRAM分是数据报,是udp协议网络编程 参考文章:SOCK_STREAM和SOCK_DGRAM两种类型的区别

Dontla的博客 7865

简单的Windows套接字(Socket)例子(源码,实例)

简单的Windows套接字(Socket)例子(源码,实例) 佟强(http://blog.csdn.net/microtong) 2008年11月21日    Server.exe PortNumber,例如Server 8000    Client.exe IPAddress PortNumber,例如Client 127.0.0.1 8000    然后在客户端的命令行输入字符

佟强 2万+

linux下socket服务端简单例子

linux下socket服务端简单例子linux下socket服务端简单例子 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int reu

但行技术的博客 431

Visual c++ 6.0 Socket简单例子

#include  #include  #pragma comment(lib,"wsock32.lib") using namespace std;int main(){    WSADATA data;    // 加载类库     WSAStartup(MAKEWORD(1, 1), &data);    // 初始化socket     

silence1214的专栏 3321
上一篇: 双方同时开启TCP连接
下一篇: Github工具(未完待续)
nice_wen
博客等级 码龄10年 44粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值