<div dir="ltr">Hi!<div><br></div><div>Your problem hides itself in the original code:</div><div><br></div><div>-define(TCP_OPTIONS, [binary, {packet, 0}, {active, false}, {reuseaddr, true}]).<br></div><div><br></div><div>This requests that the socket port is in 'binary' mode. This means that the result of `gen_tcp:recv(Socket, 0)` is {ok, Data} is a binary, not a string. One way around this is:</div><div><br></div><div>case gen_tcp:recv(Socket, 0) of</div><div>    {ok, Data} when is_binary(Data) -></div><div>        String = binary_to_list(Data),</div><div>        gen_tcp:send(Socket, string:to_upper(Data)),</div><div>        loop(Socket);</div><div>    ...</div><div><br></div><div>This works for ASCII, but it fails blatantly for anything which is utf-8, where the definition of uppercasing is less well understood. The reason you can send a string() on a binary socket is that a string is a list of code_points, and if the code points are all less than 128, then you have a list of bytes. These are a subset of the iodata() type which `gen_tcp:send/2` accepts.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jul 12, 2015 at 10:40 AM, avinash D'silva <span dir="ltr"><<a href="mailto:evnix.com@gmail.com" target="_blank">evnix.com@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>loop(Socket) -></div><div><span style="white-space:pre-wrap"> </span>case gen_tcp:recv(Socket, 0) of</div><div><span style="white-space:pre-wrap">          </span>{ok, Data} -></div><div><span style="white-space:pre-wrap">                 </span>gen_tcp:send(Socket, string:to_upper(Data)),</div><div><span style="white-space:pre-wrap">                     </span>loop(Socket);</div><div><span style="white-space:pre-wrap">            </span>{error, closed} -></div><div><span style="white-space:pre-wrap">                    </span>ok</div><div><span style="white-space:pre-wrap">       </span>end.</div><div><br></div><div>I get an error for string:to_upper()</div><div><br></div><div>I am trying to create a simple echo server that converts text to upper case.</div><div><br></div><div>original code: <a href="http://20bits.com/article/network-programming-in-erlang/" target="_blank">http://20bits.com/article/network-programming-in-erlang/</a></div><div><br></div><div><br></div><div><br></div><div><br></div></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div>