mawinkle 6 éve
szülő
commit
6c5cc25f71
4 módosított fájl, 32 hozzáadás és 14 törlés
  1. 17 9
      server.cpp
  2. 2 0
      socketio.hpp
  3. 9 2
      socketio_posix.cpp
  4. 4 3
      test.cpp

+ 17 - 9
server.cpp

@@ -1,9 +1,10 @@
 #include "socketio.hpp"
 #include <iostream>
+#include <exception>
 template<typename T>
 std::ostream& operator<<(std::ostream& out, std::vector<T> o){
 	out << "(";
-	for(int i = 0;i < o.size();i++){
+	for(unsigned int i = 0;i < o.size();i++){
 		if(o[i] == '\r')continue;
 		out << o[i];
 		if(i < (o.size() - 1))
@@ -11,17 +12,24 @@ std::ostream& operator<<(std::ostream& out, std::vector<T> o){
 	}
 	return out << ")";
 }
-/*template<>
+template<>
 std::ostream& operator<< <char>(std::ostream& out, std::vector<char> o){
-	for(int i = 0;i < o.size();i++){
+	for(unsigned int i = 0;i < o.size();i++){
 		out << o[i];
 	}
 	return out;
-}*/
+}
 int main(){
 	server_socket ssock(80);
-	cppsocket sock = ssock.accept_connection();
-	std::vector<char> vec = sock.receive();
-	std::cout << vec << std::endl;
-	sock.write(vec);
-}
+	while(true){
+		cppsocket sock = ssock.accept_connection();
+		try{
+			std::vector<char> vec = sock.receive();
+			sock.write("Hallo\n");
+			sock.close();
+		}
+		catch(std::exception& e){
+			std::cout << e.what() << std::endl;
+		}
+	}
+}

+ 2 - 0
socketio.hpp

@@ -18,6 +18,8 @@ public:
 	cppsocket(sockaddr_in _serv_addr, int _sock);
 	cppsocket();
 	cppsocket(const std::string& addr, unsigned int PORT);
+	void close();
+	int socket_id();
 	void write(const std::string& message);
 	void write(const std::vector<char>& message);
 	std::vector<char> receive();

+ 9 - 2
socketio_posix.cpp

@@ -1,6 +1,8 @@
 #include "socketio.hpp"
 #include <arpa/inet.h>
 #include <unistd.h>
+#include <cinttypes>
+using std::size_t;
 struct socket_exception : public std::exception{
 	std::string msg;
 	socket_exception(std::string&& _msg){
@@ -39,6 +41,12 @@ cppsocket::cppsocket(const std::string& addr, unsigned int PORT){
 		throw socket_exception("Could not reach server " + addr);
 	}
 }
+int cppsocket::socket_id(){
+	return sock;
+}
+void cppsocket::close(){
+	shutdown(sock, 2);
+}
 void cppsocket::write(const std::string& message){
 	for(size_t i = 0;i < message.length();i += buffersize){
 		char cs[buffersize + 1] = {0};
@@ -73,7 +81,6 @@ std::vector<char> cppsocket::receive(){
 		std::fill(buffer.begin(), buffer.end(), (char)0);
 		size_t val = read(sock, buffer.data(), buffersize + 1);
 		if(val == 0)throw socket_exception("Connection reset by peer");
-		//std::cout << val << std::endl;
 		stor.insert(stor.end(), buffer.begin(), buffer.begin() + std::min(val, (size_t)buffersize));
 		if(buffer.data()[buffersize] == (char)0)break;
 	}
@@ -91,7 +98,7 @@ server_socket::server_socket(int _port) : port_(_port){
 	address.sin_family = AF_INET;
 	address.sin_addr.s_addr = INADDR_ANY;
 	address.sin_port = htons(port());
-	if(bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0){
+	if(bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0){
 		throw socket_exception("Couldn't bind to port " + std::to_string(port()) + ", is it already in use?"); 
 	}
 	if (listen(server_fd, 16) < 0){

+ 4 - 3
test.cpp

@@ -4,6 +4,7 @@ template<typename T>
 std::ostream& operator<<(std::ostream& out, std::vector<T> o){
 	out << "[";
 	for(unsigned int i = 0;i < o.size();i++){
+		if(o[i] == '\r')continue;
 		out << o[i];
 		if(i < o.size() - 1)
 			out << ", ";
@@ -12,7 +13,7 @@ std::ostream& operator<<(std::ostream& out, std::vector<T> o){
 }
 template<>
 std::ostream& operator<< <char>(std::ostream& out, std::vector<char> o){
-	for(int i = 0;i < o.size();i++){
+	for(unsigned int i = 0;i < o.size();i++){
 		out << o[i];
 	}
 	return out;
@@ -21,11 +22,11 @@ int main(){
 	cppsocket sock("127.0.0.1", 80);
 	std::vector<char> toSend(1000000);
 	for(unsigned int i = 0;i < toSend.size();i++){
-		toSend[i] = (char)i;
+		toSend[i] = (char)(i * i);
 	}
 	sock.write(toSend);
 	std::vector<char> vec = sock.receive();
-	std::cout << (unsigned int)vec[18] << std::endl;
+	std::cout << (vec == toSend);
 	//vec = sock.receive();
 	//std::cout << vec << std::endl;
 	return 0;